This is the source code for the Forged Alliance Forever server.
master | develop |
---|---|
Install docker.
Follow the steps to get faf-db setup, the following assumes the db container is called faf-db
.
docker build -t faf/server .
docker run --link faf-db:db -p 8001:8001 -p 30351:30351 faf/server
Run py.test
docker run --link faf-db:db faf/server bash -c py.test
To contribute, please fork this repository and make pull requests to the develop branch.
Use the normal git conventions for commit messages, with the following rules:
- Subject line shorter than 80 characters
- Proper capitalized sentence as subject line, with no trailing period
- For non-trivial commits, always include a commit message body, describing the change in detail
- If there are related issues, reference them in the commit message footer
GPLv3. See the license file.
The protocol is mainly JSON-encoded maps, containing at minimum a command
key, representing the command to dispatch.
The wire format uses QDataStream (UTF-16, BigEndian).
For the lobbyconnection, each message is of the form:
ACTION: QString
With most carrying a footer containing:
LOGIN: QString
SESSION: QString
With a few message-types (UPLOAD_MOD
, UPLOAD_MAP
), there are more fields.
{command: modvault, type: start}
: show the last 100 mods{command: modvault, type: like, uid: <uid>}
: check if user liked the mod, otherwise increase the like counter{command: modvault, type: download, uid: <uid>}
: notify server about an download (for download counter), does not start the download{command: modvault, type: addcomment}
: not implemented
Can be combined !, e.g. {command: social, teaminvite: <...>, friends: <..>}
{command: social, teaminvite: <player_name>}
: Invite a Player to a Team{command: social, friends: <list of ALL friends>}
: Update the friends on the db{command: social, foes: <list of ALL foes>}
: Update the foe (muted players) on the db
{command: avatar, action: upload_avatar, name: <avatar_name>, file: <file_content>, description: <desc>}
: Admin Command to upload an avatar{command: avatar, action: list_avatar}
: Send a list of available avatars{command: avatar, action: select, avatar: <avatar_url>}
: Select a valid avatar for the player
- [deprecated]
{command: ask_session}
: response with an welcome command and an valid session (can be delayed) {command: fa_state, state: <on|...>}
: notify the server if the game has launched or closed{command: quit_team}
: Leave a team{command: accept_team_proposal, leader: <leader_name>}
: Accept Team Invitation{command: hello, version: <...>, login: <...>, password: <...>, unique_id: <...>, (session: <...>)}
: Accept Team Invitation
The stream API is deprecated, but currently the following message types are supported:
PING
: response with aPONG
PONG
: internal state changed to pongedUPLOAD_MOD, login, session, zipmap, infos, size, fileDaatas
: Upload a modUPLOAD_MAP, login, session, zipmap, infos, size, fileDatas
: Upload a map