-
Notifications
You must be signed in to change notification settings - Fork 4
Demo of connecting mobile devices to a long-polling server.
License
mmerickel/tictactoe
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
========= TicTacToe ========= This is a demo application designed to demonstrate interfacing a mobile device with a server. Board ===== a) 0|1|2 b) O| |X ----- ----- 3|4|5 |O|X ----- ----- 6|7|8 X| | The board is represented as a string of characters, where each spot may be either a blank (_), an X, or an O. Thus the board (b) above, may be shown as: "O_X_OXX__" Protocol ======== A HTTP request is denoted as a right-arrow (-->), whereas the response is a left-arrow (<--). Notifications are denoted by !!!. The client must first establish a session with the server: --> /api/play client_id=920d14a9a2204d8bbc553ef94f6d6773&name=stan <-- {"client_id": "920d14a9a2204d8bbc553ef94f6d6773", "name": "stan", "game_id": "eZUcx"} !!! {"type": "status", "board": "_________", "turn": "X", "playerX": "stan", "playerO": "kyle", "cursor": 1, "timestamp": "2011-06-05T06:26:27.088843"} !!! {"type": "connect", "name": "stan", "player": "X", "cursor": 2, "timestamp": "2011-06-05T06:26:27.088843"} !!! {"type": "connect", "name": "kyle", "player": "O", "cursor": 3, "timestamp": "2011-06-05T06:26:27.088843"} At this point the clients should connect to the server to receive notifications on their new game: --> /api/updates/{game_id} X plays first: --> /api/move client_id=920d14a9a2204d8bbc553ef94f6d6773&position=2 !!! {"type": "move", "board": "__X______", "turn": "O", "player": "X", "position": 2, "cursor": 10, "timestamp": "2011-06-05T06:26:27.088843"} --> /api/move client_id=7c288e7e8c1341ce9f11b9aaf0e1a6de&position=0 !!! {"type": "move", "board": "O_X______", "turn": "X", "player": "O", "position": 2, "cursor": 12, "timestamp": "2011-06-05T06:26:27.088843"} ... --> /api/move client_id=7c288e7e8c1341ce9f11b9aaf0e1a6de&position=8 !!! {"type": "move", "board": "O_X_OXX_O", "winner": "O", "player": "O", "position": 8, "cursor": 15, "timestamp": "2011-06-05T06:26:27.088843"} !!! {"type": "disconnect", "name": "kyle", "player": "O", "cursor": 20, "timestamp": "2011-06-05T06:26:27.088843"} Methods ======= POST requests should have a Content-Type: application/x-www-form-urlencoded GET requests must have their params in the querystring of the url. Methods have a success response, as well as potential error responses. All responses are JSON-encoded. Error responses are accompanied by a corresponding HTTP status code in the 4xx or 5xx range and a possible dictionary containing the error code and message in the format: { 'error': { 'code': 1234, 'message': 'You broke it!' } } It is safe for the client to assume that if the 'error' key is present in the response, the request was not successful. /api/play ------- Method: POST Params: client_id (optional) Identifier for the client. This will uniquely identify the client and if left blank will be randomly generated by the server. The identifier can be used later to resume a session. name (optional) Identifier for user. Will be randomly assigned if unspecified. resume (optional) Boolean "true" or "false" signifying whether to attempt to resume a previous game. If this is "true" and there are no games to resume, this will fail. Defaults to "false". Response: client_id The specified client identifier if provided, otherwise a new randomly generated identifier from the server. name The specified user name if provided, otherwise a new randomly generated name from the server (Guest1234). game_id Identifier used when connecting to the server to receive notifications. /api/quit --------- Method: POST Params: client_id Identifier for the client. /api/move --------- Method: POST Params: client_id Identifier for the client. position A digit between 0 and 8 signifying where the piece was placed. Response: none /api/chat --------- Method: POST Params: client_id Identifier for the client. message A string from the client. Response: none /api/updates/{game_id} ---------------------- Method: GET Params: cursor (optional) The cursor is used to avoid missing updates between requests. If left unspecified the events will be replayed back from the start of the game in order. Otherwise, only events after the cursor will be replayed. Connect Updates ~~~~~~~~~~~~~~~ type - "connect" timestamp Timestamp for this update in ISO format (UTC). cursor Integer representing this update. This is used such that clients can resume updates at the point they left off. name Name of player connecting to the game. player true or false depending on whether the client is a player. Disconnect Updates ~~~~~~~~~~~~~~~~~~ type - "disconnect" timestamp Timestamp for this update in ISO format (UTC). cursor Integer representing this update. This is used such that clients can resume updates at the point they left off. name Name of player disconnecting from the game. player true or false depending on whether the client is a player. Status Updates ~~~~~~~~~~~~~~ type - "status" timestamp Timestamp for this update in ISO format (UTC). cursor Integer representing this update. This is used such that clients can resume updates at the point they left off. board The board state, as described in the "Board" section above. turn 'X' or 'O' signifying whose turn it currently is. playerX Name of 'X' player. playerO Name of 'O' player. Board Updates ~~~~~~~~~~~~~ type - "move" timestamp Timestamp for this update in ISO format (UTC). cursor Integer representing this update. This is used such that clients can resume updates at the point they left off. board The board state, as described in the "Board" section above. player The player who caused this update. position The position on the board entered by the player. turn (optional) 'X' or 'O' signifying whose turn it currently is. winner (optional) 'X' or 'O' or 'D' signifying who has won the game. A draw (or cat's game) is denoted by a D. One of "turn" or "winner" will be specified. Chat Updates ~~~~~~~~~~~~ type - "chat" timestamp Timestamp for this update in ISO format (UTC). cursor Integer representing this update. This is used such that clients can resume updates at the point they left off. name The name of the player writing the message. message A message string. Terminal Updates ~~~~~~~~~~~~~~~~ type - "end" timestamp Timestamp for this update in ISO format (UTC). cursor Integer representing this update. This is used such that clients can resume updates at the point they left off. reason Various reasons, but probably because one client quit or the game is complete. Every game will contain a terminal update when it is over.
About
Demo of connecting mobile devices to a long-polling server.
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published