Protocole de discussion entre le serveur et un client.

Définitions

Remarques

Note sur les termes qui vont suivre: Un message est une série de N*sizeof(type) octets envoyés

  • du serveur vers le client: on note cela S->C(N*type)

  • du client vers le serveur: on note cela C->S(N*type)

Ordre des cartes

Table 1. Ordre des cartes

001 de trefle
012 de trefle
13roi de trefle
141 de pique
152 de pique
27roi de pique
281 de coeur
421 de carreau
56atout 1
57atout 2
76atout 21
77excuse

Enchères

Table 2. Enchères

0Passe
1Petite
2Garde
3Garde sans chien
4Garde contre le chien

Identification du client et du serveur

Table 3. Identification du client et du serveur

Data TypeNameComment
C->S(2*gint)LIBMT_NET_DATA_TYPE_GET_IDLe premier gint est l'identifiant du serveur et le second celui de la version. Si L'identifiant du client n'est pas correct, le premier gint contient -1 et le client est déconnecté.
S->C(1*gint)LIBMT_NET_DATA_TYPE_SEND_PROTOCOLversion du protocole. 1 : version 0.1
C->S(1*gint)LIBMT_NET_DATA_TYPE_GET_PROTOCOL1 si le client peut utiliser ce protocole, sinon 0 et déconnection.
S->C(1*gint)LIBMT_NET_DATA_TYPE_SEND_PLACELa place occupé par le joueur.
C->S(1*gint)LIBMT_NET_DATA_TYPE_GET_NICK_LENLongueur du nickname. Si 0 le serveur utilise le nom par défaut suivant la place du client et l'étape suivante (envoie du nickname) est passée.
C->S(long_nick*gchar)LIBMT_NET_DATA_TYPE_GET_NICKle nickname du joueur.
S->C(4*gint)LIBMT_NET_DATA_TYPE_SEND_NICK_LENlongueur de chaque nickname.
S->C(gchar*(long_nick1 + long_nick2 + long_nick3 + long_nick4))LIBMT_NET_DATA_TYPE_SEND_NICKSles nickname de tous les joueurs.

La distribution des cartes

(point de branchement pour une nouvelle partie ou en cas de deconnexion d'un jour)

Table 4. La distribution des cartes

Data TypeNameComment
S->C(18*gint)LIBMT_NET_DATA_TYPE_DILL_CARDSce sont les 18 cartes.

Encheres

La sequence suivante est repetee quatre fois:

Table 5. Encheres (séquence)

Data TypeNameComment
S->C(4*gint)LIBMT_NET_DATA_TYPE_SEND_BIDSchaque gint correspond à l'enchère du joueur dans l'ordre des places. Ils sont à -1 si le joueur n'a pas encore parlé. C'est au client de déterminer grace à ces enchères quelle est sa position.
S->C(1*gint)LIBMT_NET_DATA_TYPE_ASK_BID_QUESTIONSi le gint est non nul, le client doit faire une enchère. S'il est est null, on ignore l'étape suivante.
C->S(1*gint)LIBMT_NET_DATA_TYPE_GET_BIDUniquement si le gint précédent était non nul. Mise du client. Si la valeur est erronée, le serveur considère que le client passe.

Fin de la sequence

Table 6. Encheres (fin de la séquence)

Data TypeNameComment
S->C(4*gint)LIBMT_NET_DATA_TYPE_SEND_FINAL_BIDSresultat final des enchères. C'est au client de savoir si quelqu'un a pris et qui. Si personne n'a pris, les 4 gint sont à 0, et c'est au client de savoir qu'on va voir le chien puis recommencer la partie.
S->C(6*gint)LIBMT_NET_DATA_TYPE_SHOW_CHIENLes 6 cartes du chien si l'enchere n'est ni garde sans chien, ni garde contre.

Défausse pour le preneur

Si la partie continue (si une personne au moins n'a pas passe), et pour le preneur seulement, si l'enchere est petite ou garde :

Table 7. Défausse pour le preneur

Data TypeNameComment
C->S(6*gint)LIBMT_NET_DATA_TYPE_GET_CHIENLes 6 cartes defaussées dans le jeu du preneur. Le serveur vérifie que ces cartes sont bien présente dans le jeu du preneur.
S->C(1*gint)LIBMT_NET_DATA_TYPE_SEND_ACK_FOR_CHIEN1 si la defausse est correcte, 0 sinon. si la défausse n'est pas correcte, on retourne à l'étape précédente.

Partie

Pour chaque pli:

Table 8. Chaque pli d'une partie

Data TypeNameComment
S->C(8*gint)LIBMT_NET_DATA_TYPE_SEND_TURN_CARDSLes 4 premiers gint sont les cartes jouées par les joueurs précédents. Les 4 suivants sont les cartes du pli précédent. -1 correspond a un joueur qui n'a pas encore joué. Les cartes sont dans l'ordre des joueurs. REMARQUE: au premier pli, les 4 gint de fin sont à -1.
S->C(1*gint)LIBMT_NET_DATA_TYPE_SEND_TURN_CARDS_QUESTIONSi le gint est non nul, on passe à la suite. S'il est nul, on revient à l'étape précédente (attendre les 8*gint).
C->S(1*gint)LIBMT_NET_DATA_TYPE_GET_TURN_CARDla carte jouée si le précédent gint était non nul.
S->C(1*gint)LIBMT_NET_DATA_TYPE_SEND_ACK_FOR_CARD1 si la carte est correcte, 0 sinon. si la carte n'est pas correcte, on retourne à l'étape précédente.

Fin de partie

Table 9. Fin de partie

Data TypeNameComment
S->C(4*gint)LIBMT_NET_DATA_TYPE_SEND_LAST_TURN_CARDSLes 4 cartes du dernier pli.
S->C(4*gint)LIBMT_NET_DATA_TYPE_SEND_SCOREscore de chaque joueur pour la main.
S->C(6*gint)LIBMT_NET_DATA_TYPE_SHOW_CHIEN_AT_ENDLes 6 cartes du chien.

Nouvelle partie

On reboucle à la distribution des cartes.