summaryrefslogtreecommitdiff
path: root/public/docs/architecture.html
blob: 9b0aada95fafb7e754b9b0d90fd5963d4ae65ff6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
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> &gt; <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>