+Use the first letter of your name to indicate you are in the middle of
+working on something.
+
+Protocol pieces
+---------------
+
/----- Server, implemented in ttt-server
/ /---- Client, implemented in ttt
S C
1. Requests
-✓ 1.1 HELO
- 1.2. Global commands
+✓ 1.1. HELO
+✓ 1.2. Global commands
✓ 1.2.1. WHO
- 1.2.2. MESSAGE
- 1.2.3. HELP
-✓ 1.2.4. QUIT
- 1.2.5. VERSION
+✓ 1.2.2. STATISTICS
+✓ 1.2.3. MESSAGE
+✓ 1.2.4. HELP
+✓ 1.2.5. QUIT
+✓ 1.2.6. VERSION
1.3. Game management commands
- 1.3.1. INVITE
+✓ 1.3.1. INVITE
1.3.2. ACCEPT
+✓ 1.3.3. RETRACT
+✓ 1.3.4. DECLINE
1.4. In-game commands
1.4.1. SHOW
1.4.2. PART
1.4.3. MOVE
2. Asynchronous notification.
2.1. Global notices
- 2.1.1. NOTICE USER <username>
- 2.1.2. NOTICE QUIT <username>
- 2.1.3. NOTICE INVITE <username>
- 2.1.4. NOTICE DISPOSE <game>
- 2.1.5. NOTICE MESSAGE <username> <text>
+✓ 2.1.1. NOTICE USER <username>
+✓ 2.1.2. NOTICE QUIT <username>
+✓ 2.1.3. Game Invitation
+✓ 2.1.3.1. NOTICE INVITE <username1> <username2>
+✓ 2.1.3.2. NOTICE ACCEPT <username2> <username1>
+✓ 2.1.3.3. NOTICE RETRACT <username1> <username2>
+✓ 2.1.3.4. NOTICE DECLINE <username2> <username1>
+ 2.1.4. NOTICE NEWGAME <game> <username> <username>
+ 2.1.5. NOTICE DISPOSE <game>
+✓ 2.1.6. NOTICE MESSAGE <username> <text>
2.2. Game notices
2.2.1. Global game notices
- 2.2.1.1. NOTICE NEWGAME <username> <username>
- 2.2.1.2. NOTICE GAMEOVER <outcome> <username>
+ 2.2.1.1. NOTICE GAMEOVER <game> <outcome> <username>
2.2.2. Move notices
- 2.2.2.1. NOTICE MOVE <username> <number>
+ 2.2.2.1. NOTICE MOVE <game> <username> <number>
3. Errors
- 3.1. Connection setup errors
- 3.1.1. ERROR NONAMESET
-✓ 3.1.2. ERROR INVALIDNAME
+✓ 3.1. Connection setup errors
+✓ 3.1.1. ERROR NO_NAME_SET
+✓ 3.1.2. ERROR INVALID_NAME
3.2. Command format errors
- 3.2.1. ERROR COMMAND
+✓ 3.2.1. ERROR COMMAND
✓ 3.2.2. ERROR SYNTAX
- 3.2.3. ERROR NOTNUMBER
- 3.2.4. ERROR NOTGRID
+ 3.2.3. ERROR NOT_NUMBER
+ 3.2.4. ERROR NOT_GRID
3.3. Global command errors.
3.4. Game management errors.
- 3.4.1. ERROR NOGAME
- 3.5. User information errors
- 3.5.1. ERROR NOUSER
+✓ 3.4.1. ERROR NO_INVITE
+ 3.4.2. ERROR NO_GAME
+✓ 3.5. User information errors
+✓ 3.5.1. ERROR NO_USER
3.6. In-game errors
3.6.1. Global game errors
- 3.6.1.1. ERROR NOTINGAME
- 3.6.1.2. ERROR NOTPLAYING
+ 3.6.1.1. ERROR NOT_PLAYING
3.6.2. Moving errors
- 3.6.2.1. ERROR NOTYOURTURN
+ 3.6.2.1. ERROR NOT_YOUR_TURN
+ 3.6.2.2. ERROR NOT_VALID_MOVE
+
+Other bits
+----------
+Server log messages should include pid date and time. And server
+should log the fact when it gets terminated by a signal.
+
+Server should wait and retry a couple of times if its port is not
+available, rather than just giving up.