NetStream.client пользовательская проблема обработчика обратного вызова - PullRequest
1 голос
/ 02 ноября 2010

Я пытаюсь добавить пользовательский обработчик обратного вызова в клиент NetStream в приложении p2p. Проблема в том, что когда я добавляю такой обработчик, клиент NetStream не работает так, как раньше. Кажется, объект NetStream.client изменился. Я знаю, что объект по умолчанию это. Но изменение клиента на это не решает проблему.

remoteControlStream - это входящий поток. И поток localControl - это публикуемый поток

Это localControlStream, который отправляется партнером и принимается как remoteControlStream:

private function initLocalControlStream():void{
     localControlStream = new NetStream(nc, NetStream.DIRECT_CONNECTIONS);
     localControlStream.addEventListener(NetStatusEvent.NET_STATUS, localControlHandler);
     localControlStream.publish(myPeerID+"control");

     var localControlStreamClient:Object = new Object();

     localControlStreamClient.onPeerConnect = function(callerns:NetStream):Boolean{
          txtTest.text = "peer connected";
          if(side=="host"){
                farPeerID = callerns.farID;
                if(!allreadyConnected){
                     initRemoteControlStream();
                     allreadyConnected = true;
                 }
           }

          return true;
     }
     localControlStream.client = localControlStreamClient;
}

Это NetStream, который получает поток :

private function initRemoteControlStream():void{
     txtTest.text = "setting up remote stream";
     if(side=="client"){
           farPeerID = this.parameters.hostFingerprint;
     }

     remoteControlStream = new NetStream(nc, farPeerID);
     remoteControlStream.addEventListener(NetStatusEvent.NET_STATUS, remoteControlHandler);

     remoteControlStream.client.test = new function():void{
           txtTest.text = "Callback handler working";
     }  

     remoteControlStream.play(farPeerID+"control");

     remoteControlStream.client = this;
}

Я добавляю обработчик к remotecControlStream следующим образом (как указано выше):

remoteControlStream.client.test = new function():void{
     txtTest.text = "Callback handler working";
}

Метод onPeerConnect в localControlStream не вызывается при подключении, когда добавлен вышеуказанный обработчик. Когда я удаляю этот обработчик, вызывается метод onPeerConnect.

Любой, у кого есть советы или идеи. Очевидно, что проблема заключается в NetStream.client.

Ваша помощь очень ценится.

Gerard

1 Ответ

3 голосов
/ 02 ноября 2010

это стратус, верно? я использовал следующую модель: NetStatusEvent.NET_STATUS 'NetConnection.Connect.Success' из NetConnection расположен Main.connection я вызвал следующую функцию статического Streams класса:

`        public static function initOut(): void {
            streamOut = new NetStream(Main.connection, NetStream.DIRECT_CONNECTIONS);
            var peerConnected:Object = new Object();
                peerConnected.onPeerConnect = function(subscriberStream : NetStream) : Boolean {
                    var oo:RecievingObject = new RecievingObject();
                    subscriberStream.client = oo;
                    if(!streamIn){ initIn((subscriberStream as NetStream).farID); }                    
                    return true;
                }
            streamOut.client = peerConnected;            
            streamOut.addEventListener(NetStatusEvent.NET_STATUS, onOutStatus);            
            streamOut.attachCamera(Camera.getCamera());
            streamOut.attachAudio(Microphone.getMicrophone());
            streamOut.publish('media'); 
        }`

вот функция initIn:

        public static function initIn(id: String): void {
        streamIn = new NetStream(Main.connection, id);
        streamIn.client = new RecievingObject();
        streamIn.addEventListener(NetStatusEvent.NET_STATUS, onInStatus);
        streamIn.receiveVideo(true);
        streamIn.receiveAudio(true); 
        streamIn.play('media');
        VideoWindow.initIn(streamIn);
        Mixer.initSound(streamIn);
    }

и RecievingObject класс:

public class RecievingObject extends Object
{

    public function RecievingObject() 
    {

    }

    public function message(str: String):void {
        ChatWindow.addText('>> ' + str);
    }

    public function onPeerConnect(ns: NetStream): Boolean {
       // trace(ns.farID);
        return true;
    }

}
...