<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,
the client must identify itself:
- HELO [<username>]
+ HELO <username>
->
- HELO <servername> <username> <server-addr> <server-port>
+ HELO <username> <server-addr> <server-port>
- If the client doesn't supply <username>, the server will compute
- one and return it.
-
- 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.
+
+ Possible errors: NO_NAME_SET
+
+ 1.2.2. STATISTICS
+
+ STATISTICS <username>
+
+ ->
+
+ STATISTICS <username> "
+ TICTACTOE WINS <wins>
+ "
- lists connected users and the number of games they've won.
+ Lists the statistics for the specified user.
- 1.2.2. Message
+ Possible errors: NO_NAME_SET, NO_USER
+
+ 1.2.3. Message
MESSAGE <text>
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
QUIT
- 1.2.5. Version
+ Disconnects the client from the server.
+
+ 1.2.6. Version
VERSION <client-version-number>
INVITE
- Possible errors: NOUSER, BUSY
+ Possible errors: NO_NAME_SET, NO_USER, BUSY
1.3.2. Accepting an invitation
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
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.5.3. Making a move
+ 1.4.3. Making a move
- MOVE <number>
+ MOVE <game> <number>
->
<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.
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
+ the affected game.
- 2.2.1.1. New game begins
+ <game> is a game id generated by the server and first returned in
+ NOTICE NEWGAME
- NOTICE NEWGAME <username> <username>
-
- 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
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 unique.
+ All names must be of non-zero length and must be unique,
+ though case-insensitive.
Possibly returned by: HELO
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.
- 3.2.4. Not color
-
- ERROR NOTGRID
+ Possibly returned by: MOVE
+
+ 3.2.4. Not a grid number
- 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.3.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.2. Not playing
+ 3.6.1.1. 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