2010-04-26 27 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