]> git.cworth.org Git - ttt/blobdiff - PROTOCOL
Add a dependency of ttt-client.c on ttt-lex.h to fix the build.
[ttt] / PROTOCOL
index 519b1bab79dca6e820428ae48ac787b903bf77c6..91c8545b88ac96f482ca5c27893a3715ce10ba07 100644 (file)
--- a/PROTOCOL
+++ b/PROTOCOL
@@ -31,11 +31,11 @@ Document Conventions
        <response> is one of:
 
        <command> <args>
-       ERROR <message>
+       ERROR <error-code>
 
 1. Requests
 
-1.1 Connection setup
+1.1. Connection setup
 
     The TTTP server has no well defined port; agreement on which port to
     use must be done through some external mechanism.  Once connected,
@@ -47,21 +47,37 @@ Document Conventions
     
     HELO <username> <server-addr> <server-port>
 
-    Possible errors: INVALIDNAME
+    Possible errors: INVALID_NAME
 
 1.2. Global commands
 
-    1.2.1 Listing available users
+    1.2.1. Listing available users
 
        WHO
 
        ->
 
-       WHO <username1> <games1> <username2> <games2> ...
+       WHO <username1> <username2> ...
 
-       lists connected users and the number of games they've won.
+       Lists connected users.
 
-    1.2.2. Message
+       Possible errors: NO_NAME_SET
+
+    1.2.2. STATISTICS
+
+       STATISTICS <username>
+
+       ->
+
+       STATISTICS <username> "
+       TICTACTOE WINS <wins>
+       "
+
+       Lists the statistics for the specified user.
+
+       Possible errors: NO_NAME_SET, NO_USER
+
+    1.2.3. Message
 
        MESSAGE <text>
 
@@ -69,15 +85,27 @@ Document Conventions
        
        MESSAGE
 
-    1.2.3. Help
+       Sends a message to all connected users. The text must be a
+       single token. Use a quoted-string to include spaces in the
+       message text.
+
+       Possible errors: NO_NAME_SET
+
+    1.2.4. Help
 
        HELP { <command> }
 
+       ->
+
+       HELP { <command> } "
+       <overview or detailed help>
+       "
+
        Displays help.  If <command> is provided, displays more
        detailed help on a specific command, otherwise displays an
        overview of all commands.
 
-    1.2.4. Quit
+    1.2.5. Quit
 
        QUIT
 
@@ -87,7 +115,7 @@ Document Conventions
 
        Disconnects the client from the server.
 
-    1.2.5. Version
+    1.2.6. Version
 
        VERSION <client-version-number>
 
@@ -111,7 +139,7 @@ Document Conventions
 
        INVITE
 
-       Possible errors: NOUSER, BUSY
+       Possible errors: NO_NAME_SET, NO_USER, BUSY
 
     1.3.2. Accepting an invitation
 
@@ -121,15 +149,40 @@ Document Conventions
 
        ACCEPT
 
+       Possible errors: NO_NAME_SET, NO_USER, NO_INVITE
+
+    1.3.3. Retracting an invitiation
+
+       RETRACT <username>
+
+       ->
+
+       RETRACT
+
+       Possible errors: NO_NAME_SET, NO_USER, NO_INVITE
+
+    1.3.3. Declining an invitation
+
+       DECLINE <username>
+
+       ->
+
+       DECLINE
+
+       Possible errors: NO_NAME_SET, NO_USER, NO_INVITE
+
 1.4. In-game commands
 
+    <game> is a game id generated by the server and first returned in
+    NOTICE NEWGAME
+
     1.4.1. Get the game contents
     
-       SHOW
+       SHOW <game>
     
        ->
     
-       SHOW <game-board>
+       SHOW <game> <game-board>
     
        <game-board> is a quoted multi-line string containing an
        diagram of the tic-tac-toe board, which is a 3x3 array of
@@ -143,28 +196,28 @@ Document Conventions
     
        For example:
     
-       SHOW "
+       SHOW <game> "
        _|X|O 
         _|X|_
         X|O|O"
     
-       Possible errors: NOTINGAME
+       Possible errors: NO_NAME_SET, NO_GAME
     
     1.4.2. Part
     
-       PART
+       PART <game>
     
        ->
     
        PART
     
-       Departs the current game
+       Departs the specified game
 
-       Possible errors: NOTINGAME
+       Possible errors: NO_NAME_SET, NO_GAME
     
     1.4.3. Making a move
 
-       MOVE <number>
+       MOVE <game> <number>
     
        ->
     
@@ -173,11 +226,12 @@ Document Conventions
        <number> indicates a number in the tic-tac-toe grid as
        follows:
 
-       1|2|3
-       4|5|6
-       7|8|9
+       0|1|2
+       3|4|5
+       6|7|8
     
-       Possible errors: NOTINGAME, NOTYOURMOVE, NOTGRID
+       Possible errors: NO_NAME_SET, NO_GAME, NOT_PLAYING,
+       NOT_YOUR_MOVE, NOT_GRID, NOT_VALID_MOVE
     
 2. Asynchronous notification.  
 
@@ -205,42 +259,63 @@ Document Conventions
        NOTICE QUIT <username>
     
     2.1.3. Game invitation
+
+       2.1.3.1. Invitation is made
+
+               NOTICE INVITE <username1> <username2>
+
+       2.1.3.2. Invitation is accepted
+
+               NOTICE ACCEPT <username2> <username1>
+
+       2.1.3.3. Invitation is retracted
+
+               NOTICE RETRACT <username1> <username2>
+
+       2.1.3.4. Invitation is declined
+
+               NOTICE DECLINE <username2> <username1>
+
+       The first username listed is the one performing the action.
+
+    2.1.4. New games
+
+       NOTICE NEWGAME <game> <username> <username>
     
-       NOTICE INVITE <username>
-    
-    2.1.4. Terminated games
+       The first username listed will go first.
+
+    2.1.5. Terminated games
     
        NOTICE DISPOSE <game>
     
-    2.1.5. Message
+    2.1.6. Message
 
        NOTICE MESSAGE <username> <text>
 
+       where <text> is a quoted-string. Quotes escaped with '\"'
+
 2.2. Game notices
 
     These notices are sent to all players and watchers in
-    the affected game
-
-    2.2.1. Global game notices
-
-       2.2.1.1. New game begins
+    the affected game.
 
-           NOTICE NEWGAME <username> <username>
+    <game> is a game id generated by the server and first returned in
+    NOTICE NEWGAME
 
-           The first username listed will go first
+    2.2.1. Global game notices
 
-       2.2.1.2. Game over, and winner
+       2.2.1.1. Game over, and winner
 
-           NOTICE GAMEOVER <outcome> <username>
+           NOTICE GAMEOVER <game> <outcome> <username>
 
-           <outcame> is either WON in which case <username> indicates
+           <outcome> is either WON in which case <username> indicates
            the winner or CATSGAME in which case <username> is "".
 
     2.2.2. Move notices
 
        2.2.2.1. Move
        
-           NOTICE MOVE <username> <number>
+           NOTICE MOVE <game> <username> <number>
 
 3. Errors
 
@@ -252,15 +327,20 @@ Document Conventions
 
     3.1.1. No name set
     
-       ERROR NONAMESET
+       ERROR NO_NAME_SET
     
-       'helo' must be sent before any command other than 'quit'.
+       'helo' must be sent before any command other than 'help',
+       'version', 'quit'.
+
+       Possibly returned by: WHO, STATISTICS, MESSAGE, INVITE,
+       ACCEPT, RETRACT, DECLINE, SHOW, PART, MOVE
     
     3.1.2. Invalid name
     
-       ERROR INVALIDNAME
+       ERROR INVALID_NAME
     
-       All names must be of non-zero length and must be unique.
+       All names must be of non-zero length and must be unique,
+       though case-insensitive.
 
        Possibly returned by: HELO
 
@@ -272,74 +352,95 @@ Document Conventions
     
        ERROR COMMAND
     
-       An invalid command was specified
-    
+       An invalid command was specified.
+
     3.2.2. Syntax
     
        ERROR SYNTAX
     
-       A syntax error was detected
+       A syntax error was detected.
     
     3.2.3. Not number
     
-       ERROR NOTNUMBER
+       ERROR NOT_NUMBER
     
-       A non-numeric value was supplied where a number was required
+       A non-numeric value was supplied where a number was required.
        
+       Possibly returned by: MOVE
+
     3.2.4. Not a grid number
     
-       ERROR NOTGRID
-    
-       The number specified in the command was not a valid grid number
+       ERROR NOT_GRID
     
+       The number specified in the command was not a valid grid
+       number.
+
+       Possibly returned by: MOVE
+
 3.3. Global command errors.
 
-    There are no errors from any of the global commands
+    There are no global command errors from any of the global
+    commands.
 
 3.4. Game management errors.
 
     Errors from game management commands
     
-    3.4.1. No such game
+    3.4.1. No invitiation from/for specified user
+
+       ERROR NO_INVITE
+
+       An invitiation action was attempted where no invitation
+       exists.
+
+       Possibly returned by: ACCEPT, RETRACT, DECLINE
+
+    3.4.2. No such game
        
-       ERROR NOGAME
+       ERROR NO_GAME
        
-       A game name was provided that does not exist.
+       A game id was provided that does not exist.
+
+       Possibly returned by: SHOW, PART, MOVE
        
 3.5. User information errors
 
     3.5.1. No such user
     
-       ERROR NOUSER
+       ERROR NO_USER
 
        A user name was provided that does not exist.
 
+       Possibly returned by: STATISTICS, INVITE, ACCEPT, RETRACT,
+       DECLINE
+
 3.6. In-game errors
 
     3.6.1. Global game errors
     
-       3.6.1.1. Not in game
-    
-           ERROR NOTINGAME
-    
-           A game playing command was made, but the user is not a
-           particpant of any game.
-    
-           Possibly returned by: MOVE
+       3.6.1.1. Not playing
 
-       3.6.1.2. Not playing
-
-           ERROR NOTPLAYING
+           ERROR NOT_PLAYING
 
            A command was executed by a watching user that is
-           permitted only to players
+           permitted only to players.
+
+           Possibly returned by: MOVE
     
     3.6.2. Moving errors 
     
        3.6.2.1. Not your turn
 
-           ERROR NOTYOURTURN
+           ERROR NOT_YOUR_TURN
     
-           A move was submitted during the other player's turn
+           A move was submitted during the other player's turn.
+
+           Possibly returned by: MOVE
+
+       3.6.2.2. Not a valid move
+
+           ERROR NOT_VALID_MOVE
+
+           A move was submitted for a cell that is occupied.
 
            Possibly returned by: MOVE