diff options
author | Tor Andersson <tor@ccxvii.net> | 2024-07-23 13:48:07 +0200 |
---|---|---|
committer | Tor Andersson <tor@ccxvii.net> | 2024-07-23 13:48:10 +0200 |
commit | c52ca4b709a8752d870a9123b46cfd3764c608a7 (patch) | |
tree | e18ffd7959a22711929a4f385c0d702b66a58d5f /public/docs/architecture.html | |
parent | 611b9aa100d1135f04cde572115a5ea1f680ad72 (diff) | |
download | server-c52ca4b709a8752d870a9123b46cfd3764c608a7.tar.gz |
Start adding developer documentation.
Diffstat (limited to 'public/docs/architecture.html')
-rw-r--r-- | public/docs/architecture.html | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/public/docs/architecture.html b/public/docs/architecture.html new file mode 100644 index 0000000..9b0aada --- /dev/null +++ b/public/docs/architecture.html @@ -0,0 +1,103 @@ +<!doctype html> +<title>Architecture Overview</title> +<link rel="stylesheet" href="style.css"> +<body> +<article> + +<h1> +Architecture Overview +</h1> + +<p> +The basic architecture of Rally the Troops is a single server process storing all data in an sqlite database. +This server handles both HTTP requests for the "meta-site" and websocket requests for the rules when playing a game. + +<h2> +Meta-site +</h2> + +<p> +The meta-site consists of all the web pages showing the login, signup, active game lists, the create a game page, forum, etc. +These pages are all created using PUG templates in the "view" directory. +The "join" page is the most complicated, and also uses javascript and server sent events for live updates. + +<h2> +Database +</h2> + +<p> +See the <a href="database.html">database overview</a> for a brief introduction to the tables involved. + +<h2> +Client/Server +</h2> + +<p> +When playing a game, the browser (client) connects to the server with a web socket. +The query string indicates which game and role to connect to. + +<p> +The game state is stored in a JSON object. A redacted version of this game state is sent to the clients, which then update the game display in real time. +One part of the view object is a list of possible actions a player can take. +When a player clicks on a possible action, a message is sent to the server with this action. +The server then processes the action, updates the game state, and sends out a new view object to all the clients that are connected to the game. + +<p> +The client code for connecting to the server, sending actions, and managing the player list, game log, chat, and notes is shared between all modules. +The following files contain the code and styling for the client display: +<ul> +<li> +<a href="https://git.rally-the-troops.com/common/server/tree/public/fonts/fonts.css">public/fonts/fonts.css</a> +<li> +<a href="https://git.rally-the-troops.com/common/server/tree/public/common/client.css">public/common/client.css</a> +<li> +<a href="https://git.rally-the-troops.com/common/server/tree/public/common/client.js">public/common/client.js</a> +</ul> + +<h2> +Tools +</h2> + +<p> +The "tools" directory holds a number of other useful scripts for administrating the server and debugging modules. + +<dl> + +<dt> +<code>bash tools/export-game.sh <i>game_id</i> > <i>file.json</i></code> +<dd> +Export full game state to a JSON file. +<dt> +<code>node tools/import-game.js [title_id=<i>title</i>] <i>file.json</i></code> +<dd> +Import a game from an export JSON file. + +<dt> +<code>node tools/patchgame.js <i>game_id</i></code> +<dd> +Patch game state for one game (by replaying the action log). + +<dt> +<code>node tools/patchgame.js <i>title_id</i></code> +<dd> +Patch game state for all active games of one module. + +<dt> +<code>bash tools/undo.sh <i>game_id</i></code> +<dd> +Undo an action by removing the last entry in the replay log and running patchgame.js + +<!-- +<dt> +<code>bash tools/gencovers.sh</code> +<dd> +Generate cover images and thumbnails. Requires imagemagick. + +<dt> +<code>bash tools/showgame.sh <i>game_id</i></code> +<dd> +Print game state JSON object. + +--> + +</dl> |