2010-11-02 6 views
1

J'essaie d'ajouter un gestionnaire de rappel personnalisé à un client NetStream dans une application p2p. Le problème est que, lorsque j'ajoute un tel gestionnaire, le client NetStream ne fonctionne plus comme auparavant. Il semble que l'objet NetStream.client est modifié. Je sais que l'objet par défaut est ceci. Mais changer le client pour cela ne résout pas le problème.Problème de gestionnaire de rappel personnalisé NetStream.client

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

C'est le localControlStream qui est en cours envoyés 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; 
} 

C'est 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; 
} 

-je 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 soit pas appelé lorsque je me connecte lorsque le gestionnaire ci-dessus est ajouté. Lorsque je supprime ce gestionnaire, la méthode onPeerConnect est appelée.

Toute personne ayant des conseils ou des idées. Évidemment, le problème est le NetStream.client.

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

Gerard

Répondre

3

c'est 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 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; 
    } 

} 
+0

Merci www0z0k, votre réponse semble prometteuse. Je vais essayer, et je rapporterai =) – Gerard

+0

J'ai mis en place la partie dont j'avais besoin dans mon projet et fonctionne parfaitement. Merci beaucoup! – Gerard

Questions connexes