#+TITLE: Remote Snake API #+OPTIONS: toc:nil #+LATEX_HEADER: \usepackage{fullpage} * General Description - All transmissions will be based on UDP since latency is important - All UDP datagrams between *client and server* will contain _plain json data_ - All data should be sent in *one* datagram - All utf-8 characters in UDP datagram are in lower case * Communications ** Initialisation 1. Client sent: #+BEGIN_SRC json { "type": "new-game" } #+END_SRC 2. Server can reply: #+BEGIN_SRC json { "type": "state", "game-id": 1, "game-over": false, "snake": [[1,2],[1,3]], "food": [[6,7]] } #+END_SRC ** Gameplay *** Change Direction 1. When client is playing a game, it can ask the server to change snake direction: #+BEGIN_SRC json { "type": "update", "game-id": 1, "direction": "left", } #+END_SRC 2. Then, server can reply: #+BEGIN_SRC json { "type": "state", "game-id": 1, "game-over": false, "snake": [[0,2],[1,2]], "food": [[6,7]] } #+END_SRC *** Refresh Screen 1. When no key are pressed (the snake is simply going forward). So, client can send: #+BEGIN_SRC json { "type": "update", "game-id": 1, "direction": null } #+END_SRC 2. Server can reply: #+BEGIN_SRC json { "type": "state", "game-id": 1, "game-over": false, "snake": [[1,2],[0,2]], "food": [[6,7]] } #+END_SRC *** End Game - When game is over, server will send the following state message (switch "game-over" to true): #+BEGIN_SRC json { "type": "state", "game-id": 1, "game-over": true, "snake": [[0,2],[1,2]], "food": [[6,7]] } #+END_SRC - No reply is expected from the client and server will be in charge to free local memory.