TakServer

Last updated on 05/24/2016

Server to handle online TAK games

The input/output of server is all text.

The client to server commands and their format is as below (format of all squares is [Capital letter][digit]. e.g., A2, B5, C4, (row numbers start from 1)

Since the server and client are still in beta, the API is bound to change to support more features (though I would try to keep the changes to a minimum)

Commands to server Description
Client client name Informs the server of the client being connected from
Register username email Register with the given username and email
Login username password Login with the username and password
Login Guest Login as a guest
Seek no time incr W|B Seeks a game of board size no with time per player time specified in seconds, increment per move incr specified in seconds and an optional choice of color W for white, B for black
Accept no Accepts the seek with the number no
Game#no P Sq C|W Sends a 'Place' move to the specified game no. The optional suffix 'C' or 'W' denote if it is a capstone or a wall (standing stone)
Game#no M Sq1 Sq2 no1 no2... Sends a 'Move' move to the specified game no. Sq1 is beginning square, Sq2 is ending square, no1, no2, no3.. are the no. of pieces dropped in the in-between squares (including the last square)
Game#no OfferDraw Offers the opponent draw or accepts the opponent's draw offer
Game#no RemoveDraw Removes your draw offer
Game#no Resign Resign the game
Game#no Show Prints a somewhat human readable game position of the game number no
Game#no RequestUndo Requests the other player to undo the last move or accept the other player's undo request
Game#no RemoveUndo Removes your undo request
List Send list of seeks
GameList Send list of games in progress
Observe no Observe the specified game. Server sends the game moves and clock info
Unobserve no Unobserve the specified game
Game#no Show Sq Prints the position in the specified square (this is used mainly to convert server notation to PTN notation)
Shout text Send message text to all logged in players
JoinRoom room Join the room room
ShoutRoom room text Send test to players in room room
LeaveRoom room Leave the room room
Tell player text Send private message text to player
PING Pings to inform server that the client is alive. Recommended ping spacing is 30 seconds. Server may disconnect clients if pings are not received
quit Sent by client to indicate it is going to quit. Server removes all seeks, abandons (which loses) game if any

The Client, Login and Register are the only three commands which work while not logged in.

The server to client messages and their format is as below. The list does not include error messages, you're free to poke around and figure out the error messages on your own or look at the code.

Messages from server Description
Welcome! Just a welcome message when connected to server
Login or Register Login with username/password or login as guest or register after this message
Welcome name! A welcome message indicating that you've logged in as name
GameList Add Game#no player_white vs player_black, sizexsize, original_time, incr, moves half-moves played, player_name to move Notifies client that a game has started (which the client can observe if it wants)
GameList Remove Game#no player_white vs player_black, sizexsize, original_time, incr, moves half-moves played, player_name to move Notifies client that the game has ended
Game Start no size player_white vs player_black your color Notifies client to start a game. The game no. being no, players' names being white_player, black_player and your_color being your color which could be either "white" or "black"
Game#no P Sq C|W The 'Place' move played by the other player in game number no. The format is same as the command from client to server
Game#no M Sq1 Sq2 no1 no2... The 'Move' move played by the other player in game number no. The format is same as the command from client to server
Game#no Time whitetime blacktime Update the clock with the time specified for white and black players
Game#no Over result Game number no is over. result is one of R-0, 0-R, F-0, 0-F, 1/2-1/2
Game#no OfferDraw Indicates the opponent has offered a draw
Game#no RemoveDraw Indicates your opponent has taken back his offer to draw
Game#no RequestUndo Request from opponent to undo the last move
Game#no RemoveUndo Opponent removes his undo request
Game#no Undo Undo the last move. Client is supposed to keep track of previous board states and undo to the last state.
Game#no Abandoned Game number no is abandoned by the opponent as he quit. Clients can treat this as resign.
Seek new no name boardsize time W\B There is a new seek with seek no. no posted by name with board size boardsize with time seconds for each player and an optional color choice for seek poster
Seek remove no name boardsize time W\B Existing seek no. no is removed (either the client has joined another game or has changed his seek or has quit)
Observe Game#no player_white vs player_black, sizexsize, original_time, moves half-moves played, player_name to move Start observing the game number no of board size size with original time setting of origin_time seconds where moves half-moves are played and it is player_name's turn to move
Shout \<player> text Chat message text from player
Joined room room Indicates you've joined the room room
Left room room Indicates you've left the room room
ShoutRoom room \<player> text Message text from player to chat room room
Tell \<player> text Private chat message text from player
Told \<player> text Confirmation that your message is sent to player. You'll receive this even if player is not logged in
Message text A message from server. Might be used to indicate announcements like name accepted/server going down, etc
Error text An error message
Online no no players are connected to server
NOK Indicates the command client send is invalid or unrecognized
OK Indicates previous command is ok. Clients can ignore this. I might remove this message altogether in future as it serves no real purpose

Info for Client developers

Stand alone clients can connect directly to playtak.com at port 10000 (but this communication will not be encrypted)
The defalut Web client runs on playtak.com port 80/443.
telnet to playtak.com on port 10000 to test the commands.

Typical communication is like below