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.2.1. WHO ✓ 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.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 ✓ 2.1.2. NOTICE QUIT ✓ 2.1.3. Game Invitation ✓ 2.1.3.1. NOTICE INVITE ✓ 2.1.3.2. NOTICE ACCEPT ✓ 2.1.3.3. NOTICE RETRACT ✓ 2.1.3.4. NOTICE DECLINE 2.1.4. NOTICE NEWGAME 2.1.5. NOTICE DISPOSE ✓ 2.1.6. NOTICE MESSAGE 2.2. Game notices 2.2.1. Global game notices 2.2.1.1. NOTICE GAMEOVER 2.2.2. Move notices 2.2.2.1. NOTICE MOVE 3. Errors ✓ 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.2. ERROR SYNTAX 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 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 NOT_PLAYING 3.6.2. Moving errors 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.