Question

Je suis en train d'ajouter un gestionnaire de rappel personnalisé à un client NetStream dans une application p2p. Le problème est, quand j'ajoute un tel gestionnaire, le client NetStream ne fonctionne pas comme avant. Il semble que l'objet NetStream.client est modifié. Je sais que l'objet par défaut est la suivante. Mais changer le client à cela ne résout pas le problème.

Le remoteControlStream, est le flux entrant. Et le flux de LocalControl est le flux publié

Ceci est le localControlStream qui est en cours d'envoi par les pairs, et reçu comme 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;
}

Ceci est le NetStream qui est la réception du flux :

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;
}

J'ajouter le gestionnaire à la remotecControlStream comme celui-ci (comme ci-dessus):

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

La méthode onPeerConnect du localControlStream ne s'appelle pas quand je me connecte lorsque le gestionnaire ci-dessus est ajouté. Lorsque je supprime le gestionnaire qui, la méthode est appelée onPeerConnect.

Toute personne qui a quelques conseils / idée. Il est évident que le problème est le NetStream.client.

Votre aide est très appréciée.

Gérard

Était-ce utile?

La solution

de stratus, non? i utilisé le modèle suivant: sur NetStatusEvent.NET_STATUS 'NetConnection.Connect.Success' de NetConnection situé Main.connection i appelé la fonction suivante de la classe statique 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'); 
        }`

ici est la fonction 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);
    }

et la classe 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;
    }

}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top