Quand une socket est acceptée, elle a un nœud asssocié. Elle connaît aussi le serveur sur lequel elle tourne (plus exactement, qui l'a lancée) et donc peut obtenir la liste des autres nœuds (qui contient les instances des sockets et des serveurs et encore d'autres informations). Ça c'est Hoa\Socket\Server qui propose ça.
Par contre, là, on a une grosse différence entre Hybi-00 et Hybi-06+ il me semble. C'est que pour Hybi-00, le premier message va servir de handshake et donc finira à la poubelle. Alors que Hybi-06+ va envoyer les en-têtes tout seul, puis viendra le premier message (qui ne finira pas à la poubelle).
Le mieux est donc d'envoyer un message à la con la première fois (qui sera ignoré) histoire d'être sûr, un peu comme un ping. Je dois vraiment vérifier ça.
Je dois encore fixé ça car je n'ai pas fini mes tests à ce propos. Je sais que j'ai eu des soucis avec le chat à cause de ça. J'ai réglé le problème en truant un peu, mais bon … Après, c'est difficile à gérer pour le serveur, mais pas impossible !
Enfin, les OPCODE sont définis par la norme draft-ietf-hybi-thewebsocketprotocol-06 (et plus). Ce n'est pas mon imagination (pour une fois
).
Les différents opcode sont expliqués dans ce draft (voir la section 4, Data Framing). Ils ne sont pas explicitement appelés comme ça mais leurs valeurs si. Il faudrait que tu regardes le schéma. Je ne l'ai pas remis dans le code par flemme (ce serait utile ? plus de doc et d'explication dans le code ou plus de lien vers le draft ?).
Le continuation frame permet de faire de la fragmentation (voir la section 4.4, Fragmentation. D'ailleurs, mon code n'est pas blindé (comme le protocole change, je préfère faire léger et fonctionnel puis je blinde à la fin). La fragmentation c'est le fait de pouvoir envoyer plusieurs frames pour un seul message : on scinde le message en plusieurs bouts. Comme avec le chunck-mode pour HTTP si on veut. C'est pratique pour de gros messages car les sockets sont nulles pour envoyer d'énormes messages. Donc on envoit le message petit bout par petit bout. Peut-être devrais-je envoyer un événement (genre on('message-fragment')) pour pouvoir commencer à faire des traitements même si le message n'a pas fini d'arrivé ?
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »