diff --git a/README.md b/README.md
index 8232f70..bef89a5 100644
--- a/README.md
+++ b/README.md
@@ -5,49 +5,112 @@ A simple version of the popular game "connect four" written in Java.
## API docs
### SOCKET API
#### Basic structure
-A command consists of a json encoded string of type object which starts with `````` and ends with ``````.
-It contains:
-- id (int): some number, the response will contain the same number
-- header (int): the actual command to execute
-- data (mixed): data that has to be passed with the command
-
-A response consists of a json encoded string of type object which starts with `````` and ends with ``````.
-It contains:
-- id (int): id of the command
-- header (int): return code of the command (see later)
-- data (midex): returned data of the command
-
-#### Return codes
-The return codes are mostly identical with the HTTP standard codes.
-However there are some additional ones as well:
-
-#### Enums
-Some enumeration types
-- PlateType
- - 0: X
- - 1: O
+The structure of the API is really simple. Commands consist of words separated by spaces.
+The first word is always the command, the following ones are the parameters.
+The commands are delivered via plain tcp sockets.
+#### Data Types:
+- boolean:
+ - 'true'
+ - 'false'
+- int: Number
+- PlateType:
+ - 'X' (red)
+ - 'O' (black)
+- GameOverReason:
+ - 'Winner' -> somebody won
+ - 'Draw' -> the board is full
+ - 'OpponentDisconnected' -> the opponent disconnected
+ - 'Error' -> some error with the scket connection
#### Commands
-- Confirm game start
- - command: 1
- - requestdata:
- - type: null
- - responsedata:
- - type: object
- - def:
- - 'player'
- - type: PlateType
- - desc: the plate type the client will use
-- Insert a plate
- - command: 100
- - requestdata:
- - type: int
- - decs: index of column to insert plate
- - replydata:
- - type: string
- - def:
- - 'ok': plate was inserted
- - 'err': plate was not inserted (either index out of range or clumn full)
- - 'X': insertion resulted in the winning of PlateType X
- - 'O': insertion resulted in the winning of PlateType O
+- setUsingPlateType
+ - direction:
+ - Server -> Client
+ - usage:
+ - This is the first command the server sends to the client after a connection is established.
+ - The client shall use this plate type for his player.
+ - parameters:
+ 1: (PlateType) for the client to use
+- setIsMyTurn
+ - direction:
+ - Server -> Client
+ - usage:
+ - Sent to indicate which player's turn it currently is.
+ - It is sent for every player after every move.
+ - parameters:
+ - 1: (PlateType) of the targeted player
+ - 2: (boolean) If it is this player's turn
+- doMove:
+ - direction:
+ - Client -> Server
+ - usage:
+ - Sent in order to perform a move.
+ - The server will respond with the command movePerformed or invalidMove
+ - parameters:
+ - 1: (int) Number of the column to insert the plate into
+- movePerformed
+ - direction:
+ - Server -> Client
+ - usage:
+ - Sent when a player (client- or serverside) has performed a move.
+ - If the move was performed by the client, the command will be sent nevertheless.
+ - parameters:
+ - 1: (PlateType) of the player who performed the move.
+ - 2: (int) Number of the column the plate was inserted into.
+- invalidMove
+ - direction:
+ - Server -> Client
+ - usage:
+ - Sent the client has tried to perform an invalid move (eg. when it was not his turn)
+ - parameters:
+ - 1: (int) the column the client tried to insert into
+- gameOver
+ - direcion:
+ - Server -> Client
+ - usage:
+ - Sent when the game is over
+ - parameters:
+ - 1: (GameOverReason) Reason for the end of the game.
+ - 2: (PlateType) if parameter 1 is 'Winner' otherwise nothing
+- gameReset
+ - direction:
+ - Server <-> Client
+ - usage:
+ - Sent to indicate that the socket connection will be closed.
+ - Just closing shall have the same effect.
+ - If the game is not over yet, it shall be ended with the reason 'OpponentDisconnected'
+ - parameters:
+ - none
+
+#### Example
+The communiction between a server and a lient could look like this:
+| Direction | Command | Meaning |
+|-------------------|---------------------|---------|
+| Server -> Client | setUsingPlateType X | The client has to use the PlateTye X |
+| Server -> Client | setIsMyTurn O true | It is the server's turn |
+| Server -> Client | setIsMyTurn X false | |
+| Server -> Client | movePerformed O 6 | The server inserted a Plate into column 6 |
+| Server -> Client | setIsMyTurn O false | |
+| Server -> Client | setIsMyTurn X true | It is the client's turn |
+| Client -> Server | doMove 0 | The client wants to insert a Plate into colum 0 |
+| Server -> Client | movePerformed X 0 | The move of the client was accepted and the move was performed |
+| Server -> Client | setIsMyTurn X false | |
+| Server -> Client | setIsMyTurn O true | It is the server's turn |
+| Server -> Client | movePerformed O 6 | The server inserted a Plate into column 6 |
+| Server -> Client | setIsMyTurn O false | |
+| Server -> Client | setIsMyTurn X true | |
+| Client -> Server | doMove 0 | |
+| Server -> Client | movePerformed X 0 | |
+| Server -> Client | setIsMyTurn X false | |
+| Server -> Client | setIsMyTurn O true | |
+| Server -> Client | movePerformed O 6 | |
+| Server -> Client | setIsMyTurn O false | |
+| Server -> Client | setIsMyTurn X true | |
+| Client -> Server | doMove 0 | |
+| Server -> Client | movePerformed X 0 | |
+| Server -> Client | setIsMyTurn X false | |
+| Server -> Client | setIsMyTurn O true | |
+| Server -> Client | movePerformed O 6 | |
+| Server -> Client | gameOver Winner O | The game is over, the server won |
+| Server -> Client | gameReset | The server performed a reset |