@quakejs/master 1.0.18 → 1.0.19

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
@@ -18,15 +18,9 @@ class MasterClient extends MasterBase {
18
18
 
19
19
  (async () => {
20
20
  try {
21
- const sessionClosed = session.closed.then(
22
- () => ({ done: true, value: null }),
23
- (err) => { throw err; }
24
- );
25
-
26
21
  await session.ready;
27
22
 
28
23
  const writer = session.datagrams.writable.getWriter();
29
- const reader = session.datagrams.readable.getReader();
30
24
  let resendTimeout;
31
25
 
32
26
  /* send until a response is received */
@@ -39,18 +33,9 @@ class MasterClient extends MasterBase {
39
33
  send();
40
34
 
41
35
  /* read responses */
42
- while (true) {
43
- const { done, value } = await Promise.race([
44
- reader.read(),
45
- sessionClosed
46
- ]);
47
-
36
+ for await (const value of session.datagrams.readable) {
48
37
  clearTimeout(resendTimeout);
49
38
 
50
- if (done) {
51
- break;
52
- }
53
-
54
39
  console.log(`${host}:${port} ---> ${this.pretty(value)}`);
55
40
 
56
41
  const msg = this.decode(value);
@@ -80,21 +65,15 @@ class MasterClient extends MasterBase {
80
65
  session.closed.catch(() => {});
81
66
 
82
67
  try {
83
- const sessionClosed = session.closed.then(
84
- () => ({ done: true, value: null }),
85
- (err) => { throw err; }
86
- );
68
+ let begin;
87
69
 
88
70
  await session.ready;
89
71
 
90
- const writer = session.datagrams.writable.getWriter();
91
- const reader = session.datagrams.readable.getReader();
92
- let begin;
93
-
94
72
  /* send request multiple times until something is read back */
95
73
  const send = () => {
96
74
  begin = performance.now();
97
75
 
76
+ const writer = session.datagrams.writable.getWriter();
98
77
  writer.write(this.encode('getinfo')).catch(() => {});
99
78
 
100
79
  resendTimeout = setTimeout(send, 3000);
@@ -103,28 +82,23 @@ class MasterClient extends MasterBase {
103
82
  send();
104
83
 
105
84
  /* read response */
106
- const { done, value } = await Promise.race([
107
- reader.read(),
108
- sessionClosed
109
- ]);
110
-
111
- clearTimeout(resendTimeout);
85
+ for await (const value of session.datagrams.readable) {
86
+ clearTimeout(resendTimeout);
112
87
 
113
- if (done) {
114
- throw new Error('stream closed');
115
- }
88
+ console.log(`${addr}:${port} ---> ${this.pretty(value)}`);
116
89
 
117
- console.log(`${addr}:${port} ---> ${this.pretty(value)}`);
90
+ const msg = this.decode(value);
118
91
 
119
- const msg = this.decode(value);
92
+ if (!msg || msg.type !== 'infoResponse') {
93
+ throw new Error('invalid response type');
94
+ }
120
95
 
121
- if (!msg || msg.type !== 'infoResponse') {
122
- throw new Error('invalid response type');
123
- }
96
+ msg.info.ping = Math.min((performance.now() - begin) >>> 0, 999);
124
97
 
125
- msg.info.ping = Math.min((performance.now() - begin) >>> 0, 999);
98
+ res = msg.info;
126
99
 
127
- res = msg.info;
100
+ break;
101
+ }
128
102
  } catch (e) {
129
103
  console.error('getinfo failed', e);
130
104
  throw e;
@@ -146,21 +120,15 @@ class MasterClient extends MasterBase {
146
120
  session.closed.catch(() => {});
147
121
 
148
122
  try {
149
- const sessionClosed = session.closed.then(
150
- () => ({ done: true, value: null }),
151
- (err) => { throw err; }
152
- );
123
+ let begin;
153
124
 
154
125
  await session.ready;
155
126
 
156
- const writer = session.datagrams.writable.getWriter();
157
- const reader = session.datagrams.readable.getReader();
158
- let begin;
159
-
160
127
  /* send request multiple times until something is read back */
161
128
  const send = () => {
162
129
  begin = performance.now();
163
130
 
131
+ const writer = session.datagrams.writable.getWriter();
164
132
  writer.write(this.encode('getstatus')).catch(() => {});
165
133
 
166
134
  resendTimeout = setTimeout(send, 3000);
@@ -169,28 +137,23 @@ class MasterClient extends MasterBase {
169
137
  send();
170
138
 
171
139
  /* read response */
172
- const { done, value } = await Promise.race([
173
- reader.read(),
174
- sessionClosed
175
- ]);
176
-
177
- clearTimeout(resendTimeout);
140
+ for await (const value of session.datagrams.readable) {
141
+ clearTimeout(resendTimeout);
178
142
 
179
- if (done) {
180
- throw new Error('stream closed');
181
- }
143
+ console.log(`${addr}:${port} ---> ${this.pretty(value)}`);
182
144
 
183
- console.log(`${addr}:${port} ---> ${this.pretty(value)}`);
145
+ const msg = this.decode(value);
184
146
 
185
- const msg = this.decode(value);
147
+ if (!msg || msg.type !== 'statusResponse') {
148
+ throw new Error('invalid response type');
149
+ }
186
150
 
187
- if (!msg || msg.type !== 'statusResponse') {
188
- throw new Error('invalid response type');
189
- }
151
+ msg.info.ping = Math.min((performance.now() - begin) >>> 0, 999);
190
152
 
191
- msg.info.ping = Math.min((performance.now() - begin) >>> 0, 999);
153
+ res = { info: msg.info, players: msg.players };
192
154
 
193
- res = { info: msg.info, players: msg.players };
155
+ break;
156
+ }
194
157
  } catch (e) {
195
158
  console.error('getstatus failed', e);
196
159
  throw e;
package/master-server.js CHANGED
@@ -146,33 +146,19 @@ class MasterServer extends MasterBase {
146
146
  await this.#h3.ready;
147
147
 
148
148
  const sessionStream = await this.#h3.sessionStream('/');
149
- const sessionReader = sessionStream.getReader();
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 sessionStream) {
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,16 +169,7 @@ 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
-
172
+ for await (const value of session.datagrams.readable) {
196
173
  console.log(`${session.addr}:${session.port} ---> ${this.pretty(value)}`);
197
174
 
198
175
  if (first) {
@@ -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.19",
4
4
  "type": "module",
5
5
  "main": "index.js",
6
6
  "bin": {