Classe socket et fonction de réception

Résolu
gollunk Messages postés 22 Date d'inscription mercredi 18 octobre 2006 Statut Membre Dernière intervention 13 avril 2009 - 10 févr. 2009 à 22:32
gollunk Messages postés 22 Date d'inscription mercredi 18 octobre 2006 Statut Membre Dernière intervention 13 avril 2009 - 12 févr. 2009 à 13:00
Bonjour tout le monde,


Je me permet de poster ce sujet afin de demander de l'aide à plus
expérimenté que moi au sujet de la classe Socket car j'ai un
souci sur lequel je planche depuis un moment.


Mon but est de créé un petit chat avec la possibilité de diriger un
personnage dans un monde en 2D isométrique. Ceci implique l'envoi au
serveur de différentes données, à savoir:


-Une information permettant de prévenir tout les clients de l'arrivée d'un joueur et de pouvoir l'identifier par la suite.


-Des données "texte" pour communiquer avec les autres clients.


-Les données relatives à la position des joueurs et qui assure la gestion des mouvements.

Lors de l'envoi des données, j'utilise une sorte de trame que je
split ensuite dans un tableau et qui contient un type (LOGIN ou TEXTE).


A partir de ce type je lance une action spécifique dans la fonction de
réception des données ( pour TEXTE: afficher le texte et pour LOGIN:
enregistrer le login du joueur dans un tableau; je ne me suis pas
encore occupé de POSITION pour gérer les mouvements des joueurs).


J'en viens maintenant à mon problème qui est sans doute simple mais que je n'arrive pas à identifier:

La fonction de réception (voir socket.onData =
function(donnee:String)) se lance à chaque fois qu'une donnée est reçue
(car le trace(trame[0]) s'affiche correctement ) mais elle ne lance
qu'une seule fois une des conditions ( ici elle ne lance que case:
LOGIN mais si je n'envoie pas le login elle ne va lancer qu'une seule
fois le case:TEXTE ).

J'espère avoir été assez clair, demandez moi plus de précision si
vous en avez besoin, je vous remercie par avance de l'aide que vous
pourrez m'apporter



Code:
,

----

//Connexion au serveur

socket.connect("localhost", 1024);

socket.onConnect = connexion;

//Si la connexion est faite afficher un voyant vert:

function connexion(connecte){ if(connecte) _root.etat.gotoAndStop(2);}

//ENVOI DES DONNEES AU SERVEUR

//*****************************

//On prévient les clients de l'arrivée du joueur:

_root.socket.send("LOGIN|"+_root.login);

//Si on appuie sur le bouton ok on affiche le texte:

this.ok.onRelease = function()

{

   if(_root.boite2.text != "")

   {

      _root.socket.send("TEXTE|"+_root.login+" dit: "+_root.boite2.text);

      _root.boite2.text = "";

   }

}

//RECEPTION DES DONNES DU SERVEUR

//********************************

trame = new array();

//Lance la fonction "reception" des la reception de donnees:

socket.onData = function(donnee:String)

{

   trame = donnee.split("|");

   trace(trame[0]); //Ceci affiche bien le type de la trame en sortie

//Mais la condition suivante ne fonctionne qu'une fois:

   switch(trame[0])

   {

      case"LOGIN"://Ajout du joueur dans le tableau des personnes en ligne

      _root.enligneArray.push(donnee);

      _root.Area.text += trame[1]+" est en ligne \n";

      break;

      

      case"TEXTE":

      _root.Area.text += trame[1]+"\n";

      break;

   }

};

26 réponses

pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
11 févr. 2009 à 16:47
Je ne vois pas d'où vient ton problème, alors ... peut-être devrais-tu t'interesser au format des données que tu reçois .. et voir si un pré-traitement dans flash est nécessaire.

Désolé de ne pas pouvoir plus t'aider.

Peg'
0
gollunk Messages postés 22 Date d'inscription mercredi 18 octobre 2006 Statut Membre Dernière intervention 13 avril 2009
11 févr. 2009 à 17:28
Merci encore !


Je posterai si je trouve une solution.
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
12 févr. 2009 à 01:55
Il y a un truc qui me chagrine depuis ta première question : un server Socket envoie généralement du XML (c'est pour ça qu'on l'appelle XMLSocket) et je n'ai pas compris pourquoi tu récupérais un string ...
Je viens donc viens de taper "aquaserver" sur google pour savoir ce qu'il recrachait et le premier lien m'a donné ceci : 38491 http://flash.mediabox.fr/index.php?showtopic=38491

Et dans le tout premier post, on voit :

ATTENTION AquaServer ne renvoit pas
parfaitement l'xml qu'il a reçu, il rajoute des blancs. Pour les
retirer on utilise une petite fonction qui permet d'obtenir juste l'xml
sans les blancs :

<!--c1--><!--ec1-->// Fonction permettant d'obtenir l'xml en retirant les espaces qu'envoie aquaServer :
_connexion.onData = function(data:String) {
  var doc:XML = new XML();
  doc.ignoreWhite = true;
  doc.parseXML(data);
  parent.onReceiveXml(doc);
};

Tu n'as pas du chercher beaucoup car en 20 sec j'avais la réponse à ta question ... si j'avais su j'aurais fait ça en premier ...

Peg'

ps: la prochaine fois j'arrêterais de répondre en bossant ...
0
gollunk Messages postés 22 Date d'inscription mercredi 18 octobre 2006 Statut Membre Dernière intervention 13 avril 2009
12 févr. 2009 à 12:47
D'un côté je te remercie cordiallement, et d'un autre je me demande, effectivement, pourquoi tu me réponds... Que veux tu que je te dises ? Bien sûr que j'ai tapé AquaServer sur google, bien sûr que je me suis posé la question au sujet du XML. Si je prend la peine de poster un message ici c'est qu'il y a une bonne raison. Et si c'est de la tendance à faire son flemmard et à poser une question pour un rien sur les forums auquel tu fais allusion, ce n'est pas mon cas. Au final, je n'aurais pas du tout pensé à chercher du côté du serveur si tu ne m'en avais pas parlé et tu m'as trés bien orienté... pourquoi se plaindre ? Merci encore.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
12 févr. 2009 à 12:56
Tout simplement parce que la cause était très bête et tellement basique que je m'en veut autant qu'à toi de ne pas y avoir pensé ;)

Peg'
0
gollunk Messages postés 22 Date d'inscription mercredi 18 octobre 2006 Statut Membre Dernière intervention 13 avril 2009
12 févr. 2009 à 13:00
Ok ;) . Ceci dit, elle n'est pas si basique pour moi.
0
Rejoignez-nous