This document describes the protocol used by Stratagus to communicate with 
the metaserver.


(c) Copyright 2005 by Jimmy Salmon

Distributed under the GNU General Public License


----------------------------------------------------------------------
LOGIN
----------------------------------------------------------------------


USER username password gamename gamever

Immediately after connecting you must either log in as an existing user or 
REGISTER a new account.

Replies:
ERR_NOUSER           The username does not exist
ERR_BADPASSWORD      Incorrect password for the username
ERR_BADPARAMETER     Too many parameters, not enough parameters, or a badly 
                     formed parameter was sent
ERR_ALREADYLOGGEDIN  Already logged in
USER_OK              Login successful



REGISTER username password gamename gamever

Immediately after connecting you must either log in as an existing user or 
REGISTER a new account.

Replies:
ERR_USEREXISTS       The username already exists
ERR_BADPARAMETER     Too many parameters, not enough parameters, or a badly 
                     formed parameter was sent
ERR_ALREADYLOGGEDIN  Already logged in
REGISTER_OK          Login successful


----------------------------------------------------------------------
HOSTING GAMES
----------------------------------------------------------------------


CREATEGAME description map players ip port [password]

Create a new game.  A user may only have one created game at a time.  If the 
description or map includes spaces it must be enclosed in quotation marks.  
Players is the number of player slots (human or computer), ip is the user's 
ip address, and port is the udp port number that the engine is listening on.
An optional password may be used.

Replies:
ERR_GAMECREATED   The user already has an open created game
ERR_BADPARAMETER  Too many parameters, not enough parameters, or a badly 
                  formed parameter was sent
CREATEGAME_OK     The game was created



CANCELGAME

Cancel the created game.

Replies:
ERR_NOGAMECREATED  The user does not have a created game
ERR_GAMESTARTED    The game has already started
ERR_BADPARAMETER   Too many parameters, not enough parameters, or a badly 
                   formed parameter was sent
CANCELGAME_OK      The game was cancelled



STARTGAME

The game is starting.

Replies:
ERR_NOGAMECREATED  The user does not have a created game
ERR_BADPARAMETER   Too many parameters, not enough parameters, or a badly 
                   formed parameter was sent
STARTGAME_OK       Received the start message


----------------------------------------------------------------------
JOINING GAMES
----------------------------------------------------------------------


LISTGAMES

Get a list of all created games.  The server will send a series of LISTGAMES 
responses for all currently open games and as new games are created.  The 
LISTGAMES parameters are a unique game id used by JOINGAME, the game 
description, map, number of open player slots, total number of players (human 
and computer), game creator user name, ip address, and the udp port number the 
engine is listening on.  The server will continue sending LISTGAMES until 
LISTGAMESEND is called or the user joins a game.

Replies:
ERR_BADPARAMETER   Too many parameters, not enough parameters, or a badly 
                   formed parameter was sent
LISTGAMES id "description" "map" open_players players creator ip port


LISTGAMESEND

Stop the server from sending LISTGAMES.

Replies:
ERR_NOTLISTINGGAMES  The server is not currently sending LISTGAMES
ERR_BADPARAMETER     Too many parameters, not enough parameters, or a badly 
                     formed parameter was sent
LISTGAMESEND_OK      Message received


JOINGAME id [password]

Join a game.  The id is obtained from LISTGAMES.  The password must be sent
when joining games created with a password.

Replies:
ERR_GAMEFULL       There are no empty player slots
ERR_ALREADYINGAME  The user is already in a game 
ERR_NEEDPASSWORD   The game requires a password to join
ERR_BADPASSWORD    The password is incorrect
ERR_BADPARAMETER   Too many parameters, not enough parameters, or a badly 
                   formed parameter was sent
JOINGAME_OK        The player joined the game


PARTGAME

Leave a game.

Replies:
ERR_GAMESTARTED   The game has already started
ERR_NOTINGAME     The user is not currently in a game
ERR_BADPARAMETER  Too many parameters, not enough parameters, or a badly 
                  formed parameter was sent
PARTGAME_OK       The player left the game


----------------------------------------------------------------------
ENDING GAMES
----------------------------------------------------------------------


ENDGAME result

End a game with a result of win, lose, or draw.  TODO: find a way to prevent
cheating.

Replies:
ERR_NOTINGAME     The user is not currently in a game
ERR_BADPARAMETER  Too many parameters, not enough parameters, or a badly 
                  formed parameter was sent
ENDGAME_OK        Received the end game message


----------------------------------------------------------------------
CHATTING
----------------------------------------------------------------------


MSG message

Send a message.

Replies:
None

