2010-04-26 40 views
1

我一直在使用Adobe Stratus服務研究Flash 10中的P2P支持。我已成功能夠從一個用戶發送到另一個數據,把我的問題是,我還沒有想出如何將數據發送回一些簡單的方法(或爲某種響應第一次呼叫的)。通過P2P NetStream輕鬆實現雙向通信

目前我在做什麼;

  1. 首先建立在 「服務器」 端與Stratus的服務

    nc = new NetConnection(); 
    nc.addEventListener(NetStatusEvent.NET_STATUS, ncStatusHandler); 
    nc.connect(APPLICATION_URL + DEVELOPER_KEY); 
    
  2. 連接我做的:

    sendStream = new NetStream(nc, NetStream.DIRECT_CONNECTIONS); 
    sendStream.addEventListener(NetStatusEvent.NET_STATUS, sendStreamHandler); 
    sendStream.publish("file"); 
    

    而對 「客戶」 方面:

    // remoteFileID.text is manually copied by the user from the server (which is nc.nearID). 
    recvStream = new NetStream(nc, remoteFileID.text); 
    recvStream.client = this; 
    recvStream.addEventListener(NetStatusEvent.NET_STATUS, recvStreamHandler); 
    recvStream.play("file"); 
    
  3. 然後我調用遠程功能的客戶端上:

    ... 
    sendStream.send("aRemoteFunction", parameterData); 
    ... 
    
  4. 現在我的問題;我想從客戶端到服務器執行相同的操作,通知一切正常,或者失敗。據我瞭解,我將不得不建立從客戶機到服務器的新的NetStream(即發佈在客戶端和發揮在服務器上)。但要做到這一點,服務器需要知道nc.nearID在客戶端上。

    是否有可能獲得該ID不強制手動從客戶端複製到服務器的用戶?或者,有沒有更簡單的方法讓客戶回覆我缺少的服務器?

回答

1

聯繫了湯姆Krcha編寫通過Twitter(http://twitter.com/tomkrcha/status/12882755421):他告訴我尋找到了onPeerConnected(...)的NetStream的性質和它的工作。

訂戶NetStream上的farID解決了我的問題;

var c:Object = new Object; 
c.onPeerConnect = function(subscriber:NetStream):Boolean { 
    trace("far id: " + subscriber.farID); // This farID will be the nearID of the connecting "client". 

    recvStream = new NetStream(nc, subscriber.farID); 
    recvStream.client = this; 
    recvStream.addEventListener(NetStatusEvent.NET_STATUS, netRecvStreamHandler); 
    recvStream.play("response"); 

    return true; 
}; 

sendStream = new NetStream(nc, NetStream.DIRECT_CONNECTIONS); 
sendStream.client = c; 
sendStream.addEventListener(NetStatusEvent.NET_STATUS, netSendStreamHandler); 
sendStream.publish("file"); 
0

你爲什麼不通過sendStream.send調用一個遠程方法發送的nearID到服務器?

編輯:對不起,沒有完全得到。我建議你在服務器上監聽客戶端連接。 NetGroup.Neighbor.Connect應該是你需要的:
當鄰居連接到這個節點時發送。 info.neighbor:String屬性是鄰居的組地址。 info.peerID:String屬性是鄰居的對等體ID。

編輯:如果您收到任何事件時客戶端連接,然後你可以檢索all clients和服務器,這是在客戶端連接的流的nearNonce上使用他們的farNonce

格爾茨
back2dos

+0

的NetStream sendStream只適用於服務器,並設置爲*發佈*,所以我只能夠從服務器發送數據到客戶端上此流(只使服務器的的nearID,這客戶端已經知道,因爲它用它來連接到服務器)。 – andsve 2010-04-26 12:07:46

+0

@andsve:答案已更新。 – back2dos 2010-04-26 12:19:39

+0

我沒有得到任何NetGroup.Neighbor.Connect(我應該嗎?),我得到NetConnection.Connect.Success(來自Stratus),然後幾個NetStream.Publish。* NetStream.Play。*事件,但沒有它們包含我能理解的peerID。 :( – andsve 2010-04-26 12:36:05