websiteWebsite
baggle B@ggle
Jeu de boggle multi-joueurs en réseau - A free online multiplayer boggle game

 

Documentation

ClientServeur

Remarques de MsieurHappy: Et donc ça gère pas les messages multilignes ? (18:54:41) MsieurHappy: Le «CLIENT» on est obligé de l'envoyer ? Quand faut-il l'envoyer ? Peut-on en envoyer plusieurs ? Comment gérer si un paquet contient plusieurs fois le même attribut ?

Concepts généraux

Les communications entre un client et le serveur se font au travers d'un socket TCP.
Le serveur est à l'écoute sur un port (12345 par défaut) et le client vient s'y connecter.

Paquets de données

Les échanges à l'intérieur du socket se font par "paquets" de caractères, un paquet étant délimité d'un autre par un retour chariot (caractère \n).

Mots dans les paquets

L'intérieur d'un paquet est découpé en mots séparés par le caractère '|'. Par conséquent ce caractère est interdit dans les mots, et ne pourra être échappé. (est-ce un problème ?)
Exemple de paquet:
0
JOIN|nick=Edouard|logo=0\n
Le premier mot de chaque paquet est nommé "en tête" et caractérise le type du paquet (et donc son rôle)
Les mots suivants sont découpés en deux morceaux (séparés par le caractère '=') Le premier morceau du mot constitue l'attribut du mot, le second constitue la valeur.
Exemple: dans le mot suivant, nick représente l'attribut, et Edouard la valeur.
0
nick=Edouard
L'ordre des mots dans le paquet ne joue pas, excepté pour le header qui est toujours en première position.

Si un attribut est représenté plusieurs fois dans un paquet, le paquet sera rejeté et ignoré.

De même si il manque un attribut attendu, le paquet sera ignoré.

En revanche si un paquet comporte des attributs non-attendu, ceux ci seront simplement ignorés mais le reste du paquet sera utilisé.

Déroulement d'une connexion

On peut distinguer deux phases dans la connexion entre un client et un serveur: la phase de négociation, puis la phase de jeu.

Phase de négociation

C'est l'étape ou le client demande a être connecté au salon (même si la socket est "physiquement" déjà connectée!), ou reconnecté dans le cas d'une connexion interrompue brusquement.

Phase de jeu

Tout le reste de la connexion. Une phase de jeu peut être interrompue par deux moyens: perte du réseau et donc du socket, ou bien envoi par le client d'un paquet de déconnexion.

Liste des paquets client -> serveur


Phase de négociation uniquement


  • CONNECT
Ce paquet est utilisé uniquement pendant l'étape de négociation. Il permet de demander la connexion au salon. Il possède deux attributs: nick pour le nom que le joueur souhaite avoir, et logo pour l'identifiant de l'avatar du joueur (entre 1 et 10).
Exemple:
0
CONNECT|nick=Edouard|logo=3

  • RECONNECT
Ce paquet est utilisé uniquement pendant l'étape de négociation. Il permet de demander la re-connexion au salon. Il possède deux attributs: auth pour le code d'authentification que le serveur aura précédemment envoyé au client, et id pour l'identifiant qu'avait le joueur sur le salon.
Exemple:
0
RECONNECT|auth=45RT76TR|id=124

  • PING
Ce paquet est utilisé par un client pour connaitre l'état et la configuration d'un serveur. Il ne possède pas d'attribut.
Exemple:
0
PING|

Phase de jeu uniquement


  • WORD
Ce paquet est utilisé pour soumettre un mot au serveur. Il possède un seul attribut: word pour le mot proposé.
Exemple:
0
WORD|word=pointu

  • CHAT
Ce paquet est utilisé pour soumettre un message pour le chat. Il possède un seul attribut: msg pour le contenu du message.
Exemple:
0
CHAT|msg=Bonjour tout le monde!

  • STATUS
Ce paquet informe que l'on souhaite changer de statut sur le salon (normal/prêt/en pause/veut un nouveau tirage).
Il possède un attribut: state pour l'état dans lequel on souhaite passer (idle,ready,pause ou reset)
Exemple:
0
STATUS|state=ready

  • CLIENT
Ce paquet informe le serveur du client que l'on utilise.
Il n'est pas obligatoire est peut être envoyé à tout moment.
Il possède deux attributs: version pour la version du client (2.0, 2.0 web, 0.5 android, etc) et os pour l'os utilisé
Exemple:
0
CLIENT|version=2.0 web|os=GNU/Linux

Liste des paquets serveur -> client


Phase de négociation uniquement


  • ACCEPT
Ce paquet signifie que le serveur accepte notre demande de connexion au salon.
Il possède sept attributs: id pour notre identifiant sur le salon, auth pour notre code d'authentification (utilisé en cas de reconnexion), lang pour la langue utilisé pour jouer, chat (yes ou no) pour l'autorisation ou non du chat sur le salon, min pour le nombre de lettres que doivent avoir les mots au minimum, pf (yes ou no) pour savoir si le filtrage parental est activé, mode pour le mode de jeu (all -> tous les mots comptent, trad -> seuls les mots que j'ai été le seul à trouver comptent.)
Exemple:
0
ACCEPT|id=654|auth=45RT76TR|lang=fr|chat=yes|min=3|pf=no|mode=trad

  • DENY
Ce paquet signifie que le serveur refuse notre demande de connexion au salon.
Il possède un seul attribut qui est la raison invoquée pour le refus de la connexion. (server_full,bad_auth...)
Exemple:
0
DENY|reason=server_full
  • PING
Ce paquet est la réponse à une requète PING d'un client.
Il possède huit attributs: lang pour la langue utilisé pour jouer, chat (yes ou no) pour l'autorisation ou non du chat sur le salon, min pour le nombre de lettres que doivent avoir les mots au minimum, pf (yes ou no) pour savoir si le filtrage parental est activé, mode pour le mode de jeu, nb pour le nombre de joueurs présents actuellement, max pour le nombre maximum de joueurs sur le salon, et name pour le nom du salon. (all -> tous les mots comptent, trad -> seuls les mots que j'ai été le seul à trouver comptent.)
Exemple:
0
PING|lang=fr|chat=yes|min=3|pf=no|mode=trad|nb=5|max=10|name=le salon officiel



Phase de jeu uniquement


  • JOIN
Ce paquet signifie qu'un nouveau joueur vient de se connecter au salon.
Il possède trois attributs: nick pour le nom du joueur, logo pour l'identifiant de son avatar, et id pour l'identifiant du joueur sur le salon (par la suite le joueur est adressé uniquement par son identifiant sur le salon.
Exemple:
0
JOIN|nick=Edouard|logo=3|id=654

  • LEAVE
Ce paquet signifie qu'un des joueurs vient de quitter le salon.
Il possède un seul attribut: id pour l'identifiant du joueur sur le salon.
Exemple:
0
LEAVE|id=654

  • STATUS
Ce paquet informe de l'état d'un joueur sur le salon (normal/prêt/en pause/veut un nouveau tirage).
Il possède deux attributs: id pour l'identifiant du joueur, et state pour pour son état (idle,ready,pause ou reset)
Exemple:
0
STATUS|id=654|state=ready

  • CHAT
Ce paquet informe que l'on a reçu un nouveau message instantané.
Il possède deux attributs: id pour l'identifiant de l'émetteur (0 si l'émetteur est le serveur), et msg pour le contenu du message
Exemple:
0
CHAT|id=657|msg=Bonjour Edouard, comment vas tu ?

  • SCORE
Ce paquet informe du score total d'un joueur sur le salon.
Il possède deux attributs: id pour l'identifiant du joueur concerné, et score pour la valeur du score.
Exemple:
0
SCORE|id=657|score=210

  • START
Ce paquet informe du démarrage d'une partie.
Il possède deux attributs: max qui est le nombre total de points de cette grille, et grid qui est une chaine de caractère contenant les 16 lettres de la grille dans l'ordre suivant:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
Exemple:
0
START|grid=BAGGLEBAGGLEBAGG|max=78

  • TIME
Ce paquet informe du temps restant pour la partie en cours.
Il possède deux attributs: rem pour le temps restant en secondes, et tot pour le temps total de la partie.
Exemple:
0
TIME|rem=87|tot=180

  • WORD
Ce paquet est utilisé pour informer du statut d'un mot que l'on a proposé: good,not_in_dic,not_in_grid,short. Il possède deux seul attribut: word pour le mot proposé, et status pour son statut
Exemple:
0
WORD|word=pointu|status=not_in_grid

  • PROGRESS
Ce paquet informe de l'avancement d'un joueur sur le salon.
Il possède deux attributs: id pour l'identifiant du joueur concerné, et prog pour le pourcentage. (ce pourcentage correspond au nombre de mots que le joueur a trouvé divisé par le nombre total de mots trouvés par l'ensemble des joueurs)
Exemple:
0
PROGRESS|id=657|prog=35

  • STOP
Ce paquet informe que la partie est finie et annonce la diffusion imminente des résultats. Il possède un seul attribut: nb qui est le nombre de paquets de résultat à venir.
Exemple:
0
STOP|nb=4

  • RESULT
Ce paquet informe des résultats d'un joueur à la fin d'une partie.
Il possède trois attributs: id pour l'identifiant du joueur concerné, score pour son score à cette partie, et words pour la liste des mots qu'il a trouvé.
Exemple:
0
RESULT|id=657|score=4|words=une,tel,ces,ses
 
This page feed: RSS or Atom.
Global feed: RSS or Atom.

 

Ads