2010-04-26 24 views
1

J'ai examiné la prise en charge P2P dans Flash 10, en utilisant le service Adobe Stratus. J'ai réussi à envoyer des données d'un utilisateur à un autre, mais mon problème est que je n'ai pas compris comment renvoyer les données d'une manière simple (ou comme une sorte de réponse au premier appel).Communication bidirectionnelle facile via P2P NetStream

Ce que je fais actuellement;

  1. Tout d'abord mis en place une connexion avec le service Stratus

    nc = new NetConnection(); 
    nc.addEventListener(NetStatusEvent.NET_STATUS, ncStatusHandler); 
    nc.connect(APPLICATION_URL + DEVELOPER_KEY); 
    
  2. Du côté "serveur" je fais:

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

    Et sur le côté "client":

    // 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. Ensuite, je appeler une fonction à distance sur le client:

    ... 
    sendStream.send("aRemoteFunction", parameterData); 
    ... 
    
  4. Maintenant, mon problème; Je veux faire la même chose du client au serveur, pour notifier que tout s'est bien passé, ou quelque chose a échoué. D'après ce que je comprends, je vais devoir installer un nouveau NetStream du client au serveur (par exemple, publier sur le client et jouer sur le serveur). Mais pour ce faire, le serveur doit connaître le nc.nearID sur le client.

    Est-il possible d'obtenir cette identification sans forcer l'utilisateur à la copier manuellement du client au serveur? Ou, y a-t-il un moyen plus facile pour le client de parler au serveur qui me manque?

Répondre

1

Contacté Tom Krcha via twitter (http://twitter.com/tomkrcha/status/12882755421): il m'a dit de regarder dans le onPeerConnected (...) propriété de NetStream et cela a fonctionné.

Le farID sur l'abonné NetStream a résolu ma question;

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

pourquoi ne pas vous envoyer le nearID au serveur en invoquant une méthode distante par sendStream.send?

éditer: désolé, n'a pas tout à fait compris cela. Je suggère, vous écoutez pour les connexions client sur le serveur. NetGroup.Neighbor.Connect devrait être ce que vous avez besoin:
Envoyé lorsqu'un voisin se connecte à ce nœud. La propriété info.neighbor: String est l'adresse de groupe du voisin. La propriété info.peerID: String est l'ID homologue du voisin.

modifier: si vous obtenez des événements lorsque les clients se connectent, vous pouvez alors récupérer all clients, et d'utiliser leur farNonce sur le serveur, ce qui est le nearNonce du flux connecté sur le client.

greetz
back2dos

+0

NetStream SendStream est uniquement disponible sur le serveur et est réglé sur * publier *, donc je suis seulement capable d'envoyer des données à partir du serveur au client sur ce flux (et donc seulement le nearID du serveur, qui le client le sait déjà puisqu'il l'a utilisé pour se connecter au serveur). – andsve

+0

@andsve: réponse mise à jour. – back2dos

+0

Je ne reçois aucun NetGroup.Neighbor.Connect (devrais-je?), Je reçois NetConnection.Connect.Success (de Stratus), puis quelques événements NetStream.Publish. * NetStream.Play. *, Mais aucun ils comprennent un peerID de ce que je peux comprendre. :( – andsve