Page suivante Page précédente Table des matières

3. Description du protocole

Nous décrivons ici le protocole utilisé pour les échanges d'informations entre le serveur et ses différents clients.

Nous avons choisi de faire communiquer le serveur avec les clients par l'intermédiaire d'un protocole de type "clear text", c'est à dire constitué de messages facilement compréhensibles sous la forme de chaînes de caractères lisibles (comme le font de nombreux autres protocoles SMTP, FTP, IRC, etc.). Le fait de faire communiquer les clients/serveurs par l'intermédiaire de messages lisibles par un être humain permet de comprendre très facilement ce qui se passe, de tester et d'envoyer des messages entrés à la main, et de rester compatible au niveau des blocs de données quel que soit le type de machine. Le seul inconvénient est qu'il y a plus d'informations à envoyer par rapport à des envois en binaire. Mais pour ce projet, la vitesse et la quantité d'informations à transférer était négligeable.

3.1 Généralités

Conventions d'ecriture

le_mot

signifie que l'argument n'est en fait qu'un seul mot et ne doit donc contenir aucun espace

la chaine

signifie que l'argument est une chaine pouvant contenir des espaces

{informations}

signifie que l'argument est un ensemble d'informations structurées sous forme de listes imbriquées

Description d'un message

Un message est constitué de deux parties:

Un message est une chaîne sur une seule ligne délimitée par un retour chariot. Par ailleurs, chacun des messages échangés ne constitue qu'une seule ligne. Le délimiteur de message est donc le retour chariot qui permet de différencier les lignes de messages échangées.

Différents types d'échanges utilisés

Le protocole est basé sur 2 types d'échanges de messages :

  1. l'échange "émission d'un message"
  2. l'échange "émission d'un message/réponse à ce message"
Ces différents échanges ont toujours lieu entre un des clients et le serveur. L'échange d'information entre les différents clients est effectué par le serveur lui-même, selon la forme : "émission d'un message/diffusion d'un autre message aux autres clients/réponse à cet autre message/réponse au message initial"

L'acceptation et le refus

Dans le cas du deuxième type d'échange, la réponse attendue en retour est souvent une acceptation ou un refus de la donnée envoyée précédemment. Ceci est effectué par un message en retour :

acceptation :

OK chaîne de caractères ou données renvoyées
où la chaîne est un message informatif qui n'est normalement pas utilisé par la partie réceptrice qui se satisfait uniquement du OK.

refus :

BAD chaîne de caractères
où la chaîne de caractères sert à passer à la partie réceptrice la raison de ce refus, et pourra donc être utilisée par la partie réceptrice.

3.2 Les différents messages et échanges associés

Voyons maintenant les détails du protocole en analysant les différentes phases du jeu.

Début de partie

MSG le message

\begin{figure}[!hbtp] \begin{center} \epsffile{figures/msg.eps} \caption {\it Message echange lors de l'envoi d'un message informatif par le serveur} \end{center} \end{figure}

S'identifier auprès du serveur

NICK le_surnom

GAMES {informations sur les parties et les joueurs}

Les informations passées au client sont :

Les informations sont passées sous la forme de liste imbriquées :

{
        {id_partie_1 nom_partie_1 type_partie_1 largeur hauteur {
                                {id_joueur_1 nom_joueur_1 machine_1}
                                {id_joueur_2 nom_joueur_2 machine_2}
                                }}
        {id_partie_2 nom_partie_2 type_partie_2 largeur hauteur {
                                {id_joueur_3 nom_joueur_3 machine_3}
                                {id_joueur_4 nom_joueur_4 machine_4}
                                {id_joueur_5 nom_joueur_5 machine_5}
                                }}
}
Attention : Nous représentons ici les informations sur plusieurs lignes pour des raisons de lisibilité, mais dans la pratique l'ensemble du message est sur une seule ligne.

\begin{figure}[!hbtp] \begin{center} \epsffile{figures/nick.eps} \caption{\it Messages echanges lors de l'identification du joueur auprès du serveur} \end{center} \end{figure}

Créer une nouvelle partie

NEW nom_partie largeur hauteur type_jeu

PLAY id_partie id_joueur

\begin{figure}[!hbtp] \begin{center} \epsffile{figures/new.eps} \caption{\it Messages echangees lors de la creation d'une nouvelle partie} \end{center} \end{figure}

Integrer une partie exsitante

JOIN id_partie

Le joueur venant d'intégerer la partie jouera en dernier, c'est à dire juste avant le joueur dont c'est le tour au moment du JOIN.

JOIN id_partie nom_joueur

GRID id_partie {les informations sur les coups déjà joues}

les informations sont passées sous la forme de liste imbriquées :

{
        {id_joueur_1 {x1 y2} {x2 y2} ... {xn yn}}
        {id_joueur_2 {x1 y2} {x2 y2} ... {xn yn}}
}
Attention : Nous représentons ici les informations sur plusieurs lignes pour des raisons de lisibilité, mais dans la pratique l'ensemble du message est sur une seule ligne.

\begin{figure}[!hbtp] \begin{center} \epsffile{figures/join.eps} \caption{\it Messages echanges lors d'une demande d'integration de partie} \end{center} \end{figure}

Jouer

HIT id_partie x y

\begin{figure}[!hbtp] \begin{center} \epsffile{figures/hit_ok.eps} \caption{\it Messages echanges lors d'un coup valide} \end{center} \end{figure}

\begin{figure}[!hbtp] \begin{center} \epsffile{figures/hit_bad.eps} \caption{\it Messages echanges lors d'un coup refuse} \end{center} \end{figure}

WIN id_partie id_joueur

\begin{figure}[!hbtp] \begin{center} \epsffile{figures/hit_win.eps} \caption{\it Messages echanges lors d'une victoire par un joueur} \end{center} \end{figure}

END id_partie

\begin{figure}[!hbtp] \begin{center} \epsffile{figures/hit_end.eps} \caption{\it Messages echanges lors d'un match nul} \end{center} \end{figure}

Quitter la partie en cours

QUIT id_partie

QUIT id_partie id_joueur

\begin{figure}[!hbtp] \begin{center} \epsffile{figures/quit.eps} \caption{\it Messages echanges lors du depart d'un joueur d'une partie} \end{center} \end{figure}


Page suivante Page précédente Table des matières