Risk -- Database Access Protocol (RDAP) 1 Généralités Le Risk -- Database Access Protocol (RDAP) permet à un client de se connecter à une base de données Sybase. RDAP est prévu pour être utilisé avec une connexion TCP. Le serveur RDAP écoute sur le port 7778. Quand un client établit une connexion sur ce port, le serveur envoie un message initial de bienvenue. Après avoir reçu ce message de bienvenue, le client commence à envoyer des commandes au serveur et le serveur envoie des réponses au client. 2 États et commandes Une connexion RDAP est dans un des états ci-dessous et illustrés dans la Figure 1, à savoir : 1. Identification 2. Server_connected 3. Player_connected 4. Server_SQL 5. Server_storage 6. Player_SQL Sur la Figure 1 sont également montrées les commandes qui peuvent être exécutées dans un certain état et les transitions d'état résultantes. C'est une erreur de protocole pour le client d'essayer d'exécuter une commande pendant que la connexion est dans un état inapproprié. Le jeu de commandes se décompose en 4 groupes : 1. LOGIN : login, qui peut être de type SERVER ou de type PLAYER 2. QUIT : déconnexion 3. SCORE : enregistrement du résultat d'une partie dans la base de données [SERVER uniquement] 4. SQL : formulation d'une requête SQL, qui peut être de type SERVER ou de type PLAYER Projet d Informatique de IIème année RISK-- Protocole RDAP P.F. - 07.01.2003-1/6
(1) (9) 1. Identification (2) (3) 3. Player_connected 2. Server_connected (5) (6) (8) (4) (4) (7) 6. Player_SQL 4. Server_SQL 5. Server_storage (1) [connexion port 7778] (2) L PLAYER (3) L SERVER gl_00 (4) X (5) [toute commande SQL correcte de type SELECT] (6) [toute commande SQL correcte] (7) S [game_name number_of_players] (8) [( player : score) (player : score)] (9) Q Figure 1 : Etats d'une connexion RDAP Projet d Informatique de IIème année RISK-- Protocole RDAP P.F. - 07.01.2003-2/6
3 Description des commandes Chaque ligne de commande doit obligatoirement se terminer par le caractère de retour suivi du caractère de fin de ligne. L'ensemble des réponses du serveur se termine aussi par cette combinaison de caractères. Une réponse du serveur commence toujours par le caractère '+' ou le caractère'-' (dans le cas d'une erreur). 3.1 Commandes LOGIN C: L (SERVER PLAYER) [password] Remarques : - Un mot de passe (password) n'est requis que si le client précise un login de type SERVER. - err représente un entier fixant le type d'erreur. - error_msg correspond à un message d'erreur sous forme textuelle. 3.2 Commandes QUIT C: Q Remarque : Cette commande ne peut pas être exécutée dans les états 4, 5 et 6. 3.3 Commandes SCORE C: S game_name nb_players (on passe alors dans l'état 5) C: "("player : score")" { "("player : score")"} + : n SCORES SAVED! À la fin de cette commande, le client retourne automatiquement dans l'état précédent (état 2). Projet d Informatique de IIème année RISK-- Protocole RDAP P.F. - 07.01.2003-3/6
Remarques : - Cette commande n'est disponible que dans l'état 2, c.-à-d. lors d'un login de type SERVER. - Concernant la structure de game_name et de player, veuillez vous référer à la remarque générale en fin de chapitre (cf. point 3.5). - nb_players doit être compris entre 2 et 4. - n correspond au nombre de scores enregistrés dans la base de données. 3.4 Commandes SQL C: X S: -ERR -err : error_msg C: sql S: +result Remarques : - Cette commande peut être exécutée seulement dans les états 4 et 6. Cependant, seules des requêtes de sélection sont possibles dans l'état 6. - La requête SQL (sql) peut être formulée sur plusieurs lignes et doit se terminer par un "." seul sur une ligne. Exemples : C: SELECT * FROM scores C: WHERE (scores.game = 'Game1') C: INSERT scores (game, player, score) C: VALUES ('thewar', 'john', 190) C: DELETE FROM scores WHERE game = 'thewar' - result possède la structure suivante : 1. Requêtes de sélection : { "("field_1 : field_2 : : field_n")"} + 2. Autres : OK Exemple : S: + ("2000-03-15 13:11:00.0" : thewar : Toto : 245) ("2000-03-15 13:11:00.0" : thewar : slider : 185) ou - A la fin de cette commande, le client retourne automatiquement dans l'état précédent (état 4 ou 6). Projet d Informatique de IIème année RISK-- Protocole RDAP P.F. - 07.01.2003-4/6
3.5 Remarque générale Les attributs de type game_name et player peuvent contenir des espaces. Dans ce cas, ils doivent être nécessairement délimités par des guillemets. Si l'attribut contient le caractère '"', ce dernier devra être précédé par le caractère '\'. De plus, si l'attribut contient le caractère '\', il devra lui-même être précédé par ce même caractère. Exemples : Toto => Toto T oto => "T oto" T"oto => T\"oto T\oto => T\\oto T\o"t o => "T\\o\"t o" 4 Types d'erreur (err) et messages d'erreur (error_msg) LOGIN 100 INVALID STRUCTURE! 200 ILLEGAL COMMAND! 10 PASSWORD INCORRECT! SCORE 100 INVALID STRUCTURE! 200 ILLEGAL COMMAND! 20 INVALID PLAYERS NUMBER! 30 INVALID GAME NAME! 40 SCORES NOT SAVED! SQL 100 INVALID STRUCTURE! 200 ILLEGAL COMMAND! 50 SQL ERROR! 60 SQL NOT ALLOWED! OTHERS 300 UNRECOGNIZED COMMAND! Projet d Informatique de IIème année RISK-- Protocole RDAP P.F. - 07.01.2003-5/6
5 Structure de la base de données Table 'scores' - Champs : date : SMALLDATETIME (défaut : GETDATE()) game : VARCHAR (50) player : VARCHAR (50) score : INT - Clé primaire : <game ; player> Projet d Informatique de IIème année RISK-- Protocole RDAP P.F. - 07.01.2003-6/6