|
@@ -4,7 +4,7 @@ var iolib = require("socket.io"),
|
4
|
4
|
config = require("./configuration");
|
5
|
5
|
|
6
|
6
|
/** Map from name to *promises* of BoardData
|
7
|
|
- @type {Object<string, Promise<BoardData>>}
|
|
7
|
+ @type {{[boardName: string]: Promise<BoardData>}}
|
8
|
8
|
*/
|
9
|
9
|
var boards = {};
|
10
|
10
|
|
|
@@ -143,18 +143,32 @@ function handleSocketConnection(socket) {
|
143
|
143
|
var board = await boards[room];
|
144
|
144
|
board.users.delete(socket.id);
|
145
|
145
|
var userCount = board.users.size;
|
146
|
|
- log("disconnection", { board: board.name, users: board.users.size, reason });
|
|
146
|
+ log("disconnection", {
|
|
147
|
+ board: board.name,
|
|
148
|
+ users: board.users.size,
|
|
149
|
+ reason,
|
|
150
|
+ });
|
147
|
151
|
gauge("connected." + board.name, userCount);
|
148
|
|
- if (userCount === 0) {
|
149
|
|
- board.save();
|
150
|
|
- delete boards[room];
|
151
|
|
- gauge("boards in memory", Object.keys(boards).length);
|
152
|
|
- }
|
|
152
|
+ if (userCount === 0) unloadBoard(room);
|
153
|
153
|
}
|
154
|
154
|
});
|
155
|
155
|
});
|
156
|
156
|
}
|
157
|
157
|
|
|
158
|
+/**
|
|
159
|
+ * Unloads a board from memory.
|
|
160
|
+ * @param {string} boardName
|
|
161
|
+ **/
|
|
162
|
+async function unloadBoard(boardName) {
|
|
163
|
+ if (boards.hasOwnProperty(boardName)) {
|
|
164
|
+ const board = await boards[boardName];
|
|
165
|
+ await board.save();
|
|
166
|
+ log("unload board", { board: board.name, users: board.users.size });
|
|
167
|
+ delete boards[boardName];
|
|
168
|
+ gauge("boards in memory", Object.keys(boards).length);
|
|
169
|
+ }
|
|
170
|
+}
|
|
171
|
+
|
158
|
172
|
function handleMessage(boardName, message, socket) {
|
159
|
173
|
if (message.tool === "Cursor") {
|
160
|
174
|
message.socket = socket.id;
|