2010-11-02 25 views
1

我想在p2p應用程序中將自定義回調處理程序添加到NetStream客戶端。問題是,當我添加這樣一個處理程序時,NetStream客戶端不能像以前那樣運行。看來NetStream.client對象已更改。我知道默認對象是這個。但將客戶更改爲此並不能解決問題。NetStream.client自定義回調處理程序問題

remoteControlStream是傳入流。而本地控制流被髮布

這就是會被對方發送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"; 
} 

當我添加上面的處理程序時連接localControlStream的onPeerConnect方法不會被調用。當我刪除該處理程序時,將調用onPeerConnect方法。

任何有一些建議/想法的人。顯然問題是NetStream.client。

非常感謝您的幫助。

傑拉德

回答

3

它的層狀,對不對? 我用下面的模式: 在位於Main.connectionNetStatusEvent.NET_STATUS'NetConnection.Connect.Success'NetConnection的我稱爲靜態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; 
    } 

} 
+0

由於www0z0k,你的答案看起來很有希望。我會嘗試一下,我會回報=) – Gerard 2010-11-02 12:26:50

+0

我在我的項目中實現了我需要的部分,並且完美地工作。非常感謝! – Gerard 2010-11-02 14:35:23