@quakejs/master 1.0.4 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/master-base.js CHANGED
@@ -93,7 +93,7 @@ class Heartbeat extends Message {
93
93
  }
94
94
 
95
95
  toString () {
96
- return `${this.type}`;
96
+ return `${this.type} ${this.game}`;
97
97
  }
98
98
  }
99
99
 
package/master-server.js CHANGED
@@ -21,6 +21,32 @@ class MasterServer extends MasterBase {
21
21
  this.#h3 = new Http3Server(opts);
22
22
  }
23
23
 
24
+ #removeServer (id) {
25
+ delete this.#servers[id];
26
+
27
+ console.log(`${id} timed out, ${Object.keys(this.#servers).length} server(s) currently registered`);
28
+ }
29
+
30
+ #pruneServers () {
31
+ const now = Date.now();
32
+
33
+ for (const [id, server] of Object.entries(this.#servers)) {
34
+ const delta = now - server.lastUpdate;
35
+
36
+ if (delta > MasterServer.#SERVER_PRUNE_INTERVAL) {
37
+ this.#removeServer(id);
38
+ }
39
+ }
40
+ }
41
+
42
+ #sendServers (session, servers) {
43
+ const res = this.encode('getserversResponse', { servers });
44
+
45
+ console.log(`${session.addr}:${session.port} <--- ${this.pretty(res)}`);
46
+
47
+ session.write(res);
48
+ }
49
+
24
50
  #removeClient (session) {
25
51
  const idx = this.#clients.indexOf(session);
26
52
 
@@ -63,47 +89,21 @@ class MasterServer extends MasterBase {
63
89
  }
64
90
  }
65
91
 
66
- #removeServer (id) {
67
- delete this.#servers[id];
68
-
69
- console.log(`${id} timed out, ${Object.keys(this.#servers).length} server(s) currently registered`);
70
- }
71
-
72
- #pruneServers () {
73
- const now = Date.now();
74
-
75
- for (const [id, server] of Object.entries(this.#servers)) {
76
- const delta = now - server.lastUpdate;
77
-
78
- if (delta > MasterServer.#SERVER_PRUNE_INTERVAL) {
79
- this.#removeServer(id);
80
- }
81
- }
82
- }
83
-
84
- #sendServers (session, servers) {
85
- const msg = this.encode('getserversResponse', { servers });
86
-
87
- console.log(`${session.addr}:${session.port} <--- ${this.pretty(msg)}`);
88
-
89
- session.write(msg);
90
- }
91
-
92
- #handleInfoResponse (session, info) {
93
- if (info.challenge !== session.lastChallenge) {
94
- console.error(`Invalid challenge ${info.challenge}, expected ${session.lastChallenge}`);
92
+ #handleInfoResponse (session, msg) {
93
+ if (msg.info.challenge !== session.lastChallenge) {
94
+ console.error(`Invalid challenge ${msg.info.challenge}, expected ${session.lastChallenge}`);
95
95
  return;
96
96
  }
97
97
 
98
- this.#updateServer(session.addr, session.port, info);
98
+ this.#updateServer(session.addr, session.port, msg.info);
99
99
  }
100
100
 
101
- #handleGetServers (session, req) {
102
- /* FIXME honor req.protocol and req.keywords */
101
+ #handleGetServers (session, msg) {
102
+ /* FIXME honor protocol and keywords */
103
103
  this.#sendServers(session, Object.values(this.#servers));
104
104
  }
105
105
 
106
- #handleSubscribe (session) {
106
+ #handleSubscribe (session, msg) {
107
107
  if (!this.#addClient(session)) {
108
108
  return;
109
109
  }
@@ -112,17 +112,17 @@ class MasterServer extends MasterBase {
112
112
  this.#sendServers(session, Object.values(this.#servers));
113
113
  }
114
114
 
115
- #handleHeartbeat (session, game) {
116
- if (game !== 'QuakeArena-1') {
117
- console.log(`Invalid game ${game}, expected QuakeArena-1`);
115
+ #handleHeartbeat (session, msg) {
116
+ if (msg.game !== 'QuakeArena-1') {
117
+ console.log(`Invalid game ${msg.game}, expected QuakeArena-1`);
118
118
  return;
119
119
  }
120
120
 
121
- const msg = this.encode('getinfo');
121
+ const req = this.encode('getinfo');
122
122
 
123
- console.log(`${session.addr}:${session.port} <--- ${this.pretty(msg)}`);
123
+ console.log(`${session.addr}:${session.port} <--- ${this.pretty(req)}`);
124
124
 
125
- session.lastChallenge = msg.challenge;
125
+ session.lastChallenge = req.challenge;
126
126
 
127
127
  session.write(msg);
128
128
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quakejs/master",
3
- "version": "1.0.4",
3
+ "version": "1.0.6",
4
4
  "type": "module",
5
5
  "main": "index.js",
6
6
  "bin": {
package/server.js CHANGED
@@ -1,3 +1,5 @@
1
+ #!/usr/bin/env node
2
+
1
3
  import crypto from 'node:crypto';
2
4
  import fs from 'node:fs/promises';
3
5
  import util from 'node:util';