@quakejs/master 1.0.18 → 1.0.20

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-client.js CHANGED
@@ -17,19 +17,14 @@ class MasterClient extends MasterBase {
17
17
  session.closed.catch(() => {});
18
18
 
19
19
  (async () => {
20
- try {
21
- const sessionClosed = session.closed.then(
22
- () => ({ done: true, value: null }),
23
- (err) => { throw err; }
24
- );
20
+ let resendTimeout;
25
21
 
22
+ try {
26
23
  await session.ready;
27
24
 
25
+ /* send until a response is received */
28
26
  const writer = session.datagrams.writable.getWriter();
29
- const reader = session.datagrams.readable.getReader();
30
- let resendTimeout;
31
27
 
32
- /* send until a response is received */
33
28
  const send = () => {
34
29
  writer.write(this.encode('subscribe')).catch(() => {});
35
30
 
@@ -39,21 +34,12 @@ class MasterClient extends MasterBase {
39
34
  send();
40
35
 
41
36
  /* read responses */
42
- while (true) {
43
- const { done, value } = await Promise.race([
44
- reader.read(),
45
- sessionClosed
46
- ]);
47
-
37
+ for await (const packet of session.datagrams.readable) {
48
38
  clearTimeout(resendTimeout);
49
39
 
50
- if (done) {
51
- break;
52
- }
53
-
54
- console.log(`${host}:${port} ---> ${this.pretty(value)}`);
40
+ console.log(`${host}:${port} ---> ${this.pretty(packet)}`);
55
41
 
56
- const msg = this.decode(value);
42
+ const msg = this.decode(packet);
57
43
 
58
44
  if (msg && msg.type === 'getserversResponse') {
59
45
  for (const server of msg.servers) {
@@ -62,7 +48,7 @@ class MasterClient extends MasterBase {
62
48
  }
63
49
  }
64
50
 
65
- console.log(`Disconnected from master server`);
51
+ console.log('Disconnected from master server');
66
52
  } catch (e) {
67
53
  console.error('Disconnected from master server due to error', e);
68
54
  } finally {
@@ -80,18 +66,13 @@ class MasterClient extends MasterBase {
80
66
  session.closed.catch(() => {});
81
67
 
82
68
  try {
83
- const sessionClosed = session.closed.then(
84
- () => ({ done: true, value: null }),
85
- (err) => { throw err; }
86
- );
69
+ let begin;
87
70
 
88
71
  await session.ready;
89
72
 
73
+ /* send request multiple times until something is read back */
90
74
  const writer = session.datagrams.writable.getWriter();
91
- const reader = session.datagrams.readable.getReader();
92
- let begin;
93
75
 
94
- /* send request multiple times until something is read back */
95
76
  const send = () => {
96
77
  begin = performance.now();
97
78
 
@@ -103,28 +84,23 @@ class MasterClient extends MasterBase {
103
84
  send();
104
85
 
105
86
  /* read response */
106
- const { done, value } = await Promise.race([
107
- reader.read(),
108
- sessionClosed
109
- ]);
110
-
111
- clearTimeout(resendTimeout);
87
+ for await (const packet of session.datagrams.readable) {
88
+ clearTimeout(resendTimeout);
112
89
 
113
- if (done) {
114
- throw new Error('stream closed');
115
- }
90
+ console.log(`${addr}:${port} ---> ${this.pretty(packet)}`);
116
91
 
117
- console.log(`${addr}:${port} ---> ${this.pretty(value)}`);
92
+ const msg = this.decode(packet);
118
93
 
119
- const msg = this.decode(value);
94
+ if (!msg || msg.type !== 'infoResponse') {
95
+ throw new Error('invalid response type');
96
+ }
120
97
 
121
- if (!msg || msg.type !== 'infoResponse') {
122
- throw new Error('invalid response type');
123
- }
98
+ msg.info.ping = Math.min((performance.now() - begin) >>> 0, 999);
124
99
 
125
- msg.info.ping = Math.min((performance.now() - begin) >>> 0, 999);
100
+ res = msg.info;
126
101
 
127
- res = msg.info;
102
+ break;
103
+ }
128
104
  } catch (e) {
129
105
  console.error('getinfo failed', e);
130
106
  throw e;
@@ -146,18 +122,13 @@ class MasterClient extends MasterBase {
146
122
  session.closed.catch(() => {});
147
123
 
148
124
  try {
149
- const sessionClosed = session.closed.then(
150
- () => ({ done: true, value: null }),
151
- (err) => { throw err; }
152
- );
125
+ let begin;
153
126
 
154
127
  await session.ready;
155
128
 
129
+ /* send request multiple times until something is read back */
156
130
  const writer = session.datagrams.writable.getWriter();
157
- const reader = session.datagrams.readable.getReader();
158
- let begin;
159
131
 
160
- /* send request multiple times until something is read back */
161
132
  const send = () => {
162
133
  begin = performance.now();
163
134
 
@@ -169,28 +140,23 @@ class MasterClient extends MasterBase {
169
140
  send();
170
141
 
171
142
  /* read response */
172
- const { done, value } = await Promise.race([
173
- reader.read(),
174
- sessionClosed
175
- ]);
176
-
177
- clearTimeout(resendTimeout);
143
+ for await (const packet of session.datagrams.readable) {
144
+ clearTimeout(resendTimeout);
178
145
 
179
- if (done) {
180
- throw new Error('stream closed');
181
- }
146
+ console.log(`${addr}:${port} ---> ${this.pretty(packet)}`);
182
147
 
183
- console.log(`${addr}:${port} ---> ${this.pretty(value)}`);
148
+ const msg = this.decode(packet);
184
149
 
185
- const msg = this.decode(value);
150
+ if (!msg || msg.type !== 'statusResponse') {
151
+ throw new Error('invalid response type');
152
+ }
186
153
 
187
- if (!msg || msg.type !== 'statusResponse') {
188
- throw new Error('invalid response type');
189
- }
154
+ msg.info.ping = Math.min((performance.now() - begin) >>> 0, 999);
190
155
 
191
- msg.info.ping = Math.min((performance.now() - begin) >>> 0, 999);
156
+ res = { info: msg.info, players: msg.players };
192
157
 
193
- res = { info: msg.info, players: msg.players };
158
+ break;
159
+ }
194
160
  } catch (e) {
195
161
  console.error('getstatus failed', e);
196
162
  throw e;
package/master-server.js CHANGED
@@ -145,34 +145,20 @@ class MasterServer extends MasterBase {
145
145
  try {
146
146
  await this.#h3.ready;
147
147
 
148
- const sessionStream = await this.#h3.sessionStream('/');
149
- const sessionReader = sessionStream.getReader();
148
+ const stream = await this.#h3.sessionStream('/');
150
149
 
151
150
  console.log(`listening on ${this.#h3.host}:${this.#h3.port}`);
152
151
 
153
- while (true) {
154
- const { done, value } = await sessionReader.read();
155
- const session = value;
156
-
157
- if (done) {
158
- break;
159
- }
160
-
152
+ for await (const session of stream) {
161
153
  /* prevent unhandled rejections before main loop */
162
154
  session.ready.catch(() => {});
163
155
  session.closed.catch(() => {});
164
156
 
165
157
  (async () => {
166
158
  try {
167
- const sessionClosed = session.closed.then(
168
- () => ({ done: true, value: null }),
169
- (err) => { throw err; }
170
- );
171
-
172
159
  await session.ready;
173
160
 
174
161
  const writer = session.datagrams.writable.getWriter();
175
- const reader = session.datagrams.readable.getReader();
176
162
  const [addr, port] = session.peerAddress.split(':');
177
163
  let first = true;
178
164
 
@@ -183,20 +169,11 @@ class MasterServer extends MasterBase {
183
169
  writer.write(data).catch(e => {});
184
170
  };
185
171
 
186
- while (true) {
187
- const { done, value } = await Promise.race([
188
- reader.read(),
189
- sessionClosed
190
- ]);
191
-
192
- if (done) {
193
- break;
194
- }
195
-
196
- console.log(`${session.addr}:${session.port} ---> ${this.pretty(value)}`);
172
+ for await (const packet of session.datagrams.readable) {
173
+ console.log(`${session.addr}:${session.port} ---> ${this.pretty(packet)}`);
197
174
 
198
175
  if (first) {
199
- const str = String.fromCharCode.apply(null, value);
176
+ const str = String.fromCharCode.apply(null, packet);
200
177
 
201
178
  first = false;
202
179
 
@@ -206,7 +183,7 @@ class MasterServer extends MasterBase {
206
183
  }
207
184
  }
208
185
 
209
- const msg = this.decode(value);
186
+ const msg = this.decode(packet);
210
187
 
211
188
  switch (msg?.type) {
212
189
  case 'heartbeat':
@@ -227,8 +204,9 @@ class MasterServer extends MasterBase {
227
204
  }
228
205
  }
229
206
  } catch (e) {
230
- console.error(`Client ${session.addr}:${session.port} terminated`, e);
207
+ console.error(`Session ${session.addr}:${session.port} terminated`, e);
231
208
  } finally {
209
+ console.log(`Removing client ${session.addr}:${session.port}`);
232
210
  this.#removeClient(session);
233
211
  }
234
212
  })();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quakejs/master",
3
- "version": "1.0.18",
3
+ "version": "1.0.20",
4
4
  "type": "module",
5
5
  "main": "index.js",
6
6
  "bin": {