Здравствуйте.
Пишу р2р-шный камчат, проблемы возникают при созданию обратного слушателя "сидера" от "пира".
Сид

Код AS3:
public function initConnection():void{
trace('initconnect');
nc = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS,ncStatus);
nc.connect(SERVER_ADDRESS+DEVELOPER_KEY);
}
public function ncStatus(event:NetStatusEvent):void{
trace(event.info.code);
myPeerID = nc.nearID;
initSendStream();
}
public function initSendStream():void{
trace("initSendStream");
sendStream = new NetStream(nc,NetStream.DIRECT_CONNECTIONS);
sendStream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
sendStream.publish(myPeerID);
var sendStreamClient:Object = new Object();
sendStreamClient.onPeerConnect = function(callerns:NetStream):Boolean{
farPeerID = callerns.farID;
trace("onPeerConnect "+farPeerID);
initRecvStream();
//var metaData:Object = new Object();
//metaData.title = "myStream";
//metaData.width = Camera.getCamera().width;
//metaData.height = Camera.getCamera().height;
//sendStream.send("@setDataFrame", "onMetaData", metaData);
return true;
}
sendStream.client = sendStreamClient;
}
public function initRecvStream():void{
recvStream = new NetStream(nc,farPeerID);
recvStream.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler2);
recvStream.play("c-channel");
var r = new Object();
recvStream.client = r;
}
public function receiveSomeData(str:String):void{
email.text=str;
}
public function sendSomeData():void{
//sendStream.send("receiveSomeData",txtSendData.text);
//txtSendData.text='';
}
public function netStatusHandler2(event:NetStatusEvent):void{
//trace("reciver");
//trace(event.info.code);
}
public function netStatusHandler(event:NetStatusEvent):void{
trace(event.info.code);
if (event.info.code == "NetConnection.Connect.Success") {
trace('softid');
}
if (event.info.code == "NetStream.Publish.Start")
{
if (stats!='set')
{
stats='set';
sendStream.attachCamera( Camera.getCamera() );
sendStream.attachAudio( Microphone.getMicrophone() );
softid = (_sharedObj.data.softid) ? _sharedObj.data.softid: "";
var loader:URLLoader = new URLLoader();
loader.addEventListener( Event.COMPLETE, servComplete );
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
trace("***Publish start\n***");
trace("SoftID -> "+softid);
trace("StreamID -> "+nc.nearID);
//loader.load( new URLRequest("http://localhost/demo/setid.php?softid="+softid+"&streamid="+nc.nearID+"&email="+email.text ) );
}
}
}
Пир

Код AS3:
function initConnection():void{
trace('initconnect');
if(peep!=""){
farPeerID = peep;
}
nc = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS,ncStatus);
nc.connect(SERVER_ADDRESS+DEVELOPER_KEY);
}
function ncStatus(event:NetStatusEvent):void{
trace(event.info.code);
myPeerID = nc.nearID;
txtFingerprint.text = myPeerID;
initSendStream();
initRecvStream();
}
function initSendStream():void{
trace("initSendStream");
sendStream = new NetStream(nc,NetStream.DIRECT_CONNECTIONS);
sendStream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
sendStream.publish("c-channel");
var sendStreamClient:Object = new Object();
sendStreamClient.onPeerConnect = function(callerns:NetStream):Boolean{
farPeerID = callerns.farID;
trace("onPeerConnect "+farPeerID);
return true;
}
sendStream.client = sendStreamClient;
}
senders.addEventListener(MouseEvent.CLICK,sending);
function sending(eve:Event):void
{
trace("sending");
sendStream.send("receiveSomeData","sending");
}
function initRecvStream():void{
var customClient:Object = new Object();
customClient.onMetaData = metaDataHandler;
recvStream = new NetStream(nc,farPeerID);
recvStream.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler);
recvStream.client = {onMetaData:ns_onMetaData, onCuePoint:ns_onCuePoint};
recvStream.play(farPeerID);
video.attachNetStream(recvStream);
function metaDataHandler(infoObject:Object):void
{
trace(infoObject.width);
trace(infoObject.height);
}
}
function ns_onMetaData(item:Object):void {
trace("metaData");
video.width = item.width;
video.height = item.height;
video.x = (stage.stageWidth - video.width) / 2;
video.y = (stage.stageHeight - video.height) / 2;
}
function ns_onCuePoint(item:Object):void {
trace("cuePoint");
trace(item.name + "\t" + item.time);
}
function onMetaData(info:Object):void {
trace("width: " + info.width);
trace("height: " + info.height);
}
function receiveSomeData(str:String):void{
}
function sendSomeData():void{
//sendStream.send("receiveSomeData",txtSendData.text);
//txtSendData.text='';
}
function netStatusHandler(event:NetStatusEvent):void{
trace(event.info.code);
if (event.info.code == "NetConnection.Connect.Success") {
}
}
Цепь последовательности:
Сид получает от стратуса ИД записывает его в БД и начинает трансляцию.
Пир считывает БД подключается к Сид и начинает воспроизводить видеопоток.
Сид определивши подключение Пира создаёт для слушатель, который должен принимать и отдавать команды, свойства от/к Пира/у.
При моей реализации Сид сходит с ума, получая практически постоянно netStatusHandler2