@yyyu-star/arcade-kit 0.10.2 → 0.11.1
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/CHANGELOG.md +26 -0
- package/README.md +84 -3
- package/dist/client.d.ts +41 -8
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +119 -43
- package/dist/client.js.map +1 -1
- package/dist/fun-logic.d.ts +184 -0
- package/dist/fun-logic.d.ts.map +1 -0
- package/dist/fun-logic.js +249 -0
- package/dist/fun-logic.js.map +1 -0
- package/dist/fun.d.ts +1 -13
- package/dist/fun.d.ts.map +1 -1
- package/dist/fun.js +3 -2
- package/dist/fun.js.map +1 -1
- package/dist/room.d.ts +5 -0
- package/dist/room.d.ts.map +1 -1
- package/dist/room.js +24 -5
- package/dist/room.js.map +1 -1
- package/dist/table-fun.d.ts +152 -0
- package/dist/table-fun.d.ts.map +1 -0
- package/dist/table-fun.js +652 -0
- package/dist/table-fun.js.map +1 -0
- package/package.json +9 -1
- package/src/client.ts +119 -41
- package/src/fun-logic.ts +351 -0
- package/src/fun.ts +3 -2
- package/src/room.ts +28 -4
- package/src/table-fun.ts +713 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-fun.js","sourceRoot":"","sources":["../src/table-fun.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yyyu-star/arcade-kit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.1",
|
|
4
4
|
"description": "Multiplayer toolkit for small Cloudflare Workers games: Durable Object game rooms, room create/join entry points, browser client, daily write quota, ChaCha20 RNG, platform or standalone (guest) identity. 小游戏共用的联机底座",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -65,6 +65,14 @@
|
|
|
65
65
|
"types": "./dist/fun.d.ts",
|
|
66
66
|
"default": "./dist/fun.js"
|
|
67
67
|
},
|
|
68
|
+
"./fun-logic": {
|
|
69
|
+
"types": "./dist/fun-logic.d.ts",
|
|
70
|
+
"default": "./dist/fun-logic.js"
|
|
71
|
+
},
|
|
72
|
+
"./table-fun": {
|
|
73
|
+
"types": "./dist/table-fun.d.ts",
|
|
74
|
+
"default": "./dist/table-fun.js"
|
|
75
|
+
},
|
|
68
76
|
"./testing": {
|
|
69
77
|
"types": "./dist/testing.d.ts",
|
|
70
78
|
"default": "./dist/testing.js"
|
package/src/client.ts
CHANGED
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 浏览器端连接器(docs/platform-backend.md 4.5):
|
|
3
3
|
* - 断线后按指数退避加随机抖动重连;房间每次都回全量快照(welcome),客户端整桌重画,不做增量修补;
|
|
4
|
-
* - 页面从后台切回来(visibilitychange、pageshow)时立刻检查连接:iOS Safari、微信切后台会挂起连接;
|
|
4
|
+
* - 页面从后台切回来(document 的 visibilitychange、window 的 pageshow)、网络恢复(window 的 online)时立刻检查连接:iOS Safari、微信切后台会挂起连接;
|
|
5
|
+
* 从往返缓存(bfcache,pageshow 带 persisted)回来的页面,旧连接一律作废、马上重连(0.11.1);
|
|
6
|
+
* - 静默死掉的连接(0.11.1):iOS 锁屏、切 App 以后 socket 常常还是 OPEN、也不触发 close,发出去的石沉大海。
|
|
7
|
+
* 每次心跳(和切回前台)发 "ping" 以后等 PONG_WAIT_MS,这期间什么都没收到(连房间自动回的 "pong" 都没有)就判它死了:
|
|
8
|
+
* 不等 close,直接扔掉、按断线重连。建连卡在 CONNECTING 超过 CONNECT_MS 也一样。只看"收到过没有",不比时钟,后台节流的计时器晚跑也不会误判;
|
|
5
9
|
* - 收到 1008、1009 或 4000 段关闭码时不重连(违规、房间关了、被别处顶掉、版本太旧、没登录 4401、别的网站 4403);
|
|
6
10
|
* - 平台暂时不可用(1013)照常按退避重连;
|
|
7
11
|
* - 连着 maxFailures 次(默认 20 次,约 4 分钟)都没进得了房间(没收到 welcome)就停下,状态变成 failed,由界面提示"连不上"、让用户点 retry()。
|
|
8
12
|
* 退避和失败次数都在收到 welcome 时才清零,不在 onopen:被拒的连接也会先 open 再关,按 onopen 清零就会一直快速重连;
|
|
9
13
|
* - 下行消息按 seq 去重,旧的丢掉;上行操作带 moveId 和 baseSeq(做决定时看到的 seq),没收到 ack 的在重连后原样重发:
|
|
10
14
|
* 房间认得出重复的 moveId;牌局在那之后变过的,房间回 stale,不会把旧操作套到新的一手上;
|
|
11
|
-
* - 心跳发纯文本 "ping",房间由运行时自动回 "pong"
|
|
15
|
+
* - 心跳发纯文本 "ping",房间由运行时自动回 "pong"(setWebSocketAutoResponse),不唤醒房间。
|
|
12
16
|
*
|
|
13
17
|
* 浏览器里的计时器(重连、心跳)可以用 setTimeout,"只用一个闹钟"是房间(Durable Object)那边的规矩。
|
|
14
18
|
*/
|
|
@@ -38,13 +42,19 @@ export interface RoomClientOptions<V> {
|
|
|
38
42
|
random?: () => number;
|
|
39
43
|
setTimer?: (fn: () => void, ms: number) => unknown;
|
|
40
44
|
clearTimer?: (t: unknown) => void;
|
|
41
|
-
/**
|
|
42
|
-
events?:
|
|
45
|
+
/** 页面事件来源:events 收 visibilitychange(默认 document),windowEvents 收 pageshow、online(默认 window,没给时用 events);没有就不监听 */
|
|
46
|
+
events?: EventSourceLike;
|
|
47
|
+
windowEvents?: EventSourceLike;
|
|
43
48
|
isHidden?: () => boolean;
|
|
44
49
|
/** 连着几次没进得了房间(没收到 welcome;被拒的连接也会先 open 再关)就停下,默认 20 */
|
|
45
50
|
maxFailures?: number;
|
|
46
51
|
}
|
|
47
52
|
|
|
53
|
+
export interface EventSourceLike {
|
|
54
|
+
addEventListener(type: string, fn: (ev?: unknown) => void): void;
|
|
55
|
+
removeEventListener(type: string, fn: (ev?: unknown) => void): void;
|
|
56
|
+
}
|
|
57
|
+
|
|
48
58
|
export interface WebSocketLike {
|
|
49
59
|
readyState: number;
|
|
50
60
|
onopen: ((ev: unknown) => void) | null;
|
|
@@ -59,6 +69,10 @@ const OPEN = 1;
|
|
|
59
69
|
const BASE_MS = 500;
|
|
60
70
|
const MAX_MS = 15_000;
|
|
61
71
|
const HEARTBEAT_MS = 25_000;
|
|
72
|
+
/** 发了 ping 以后等多久没收到任何东西就判连接死了(0.11.1)。房间的自动回 pong 不经过游戏代码,正常几十毫秒就到 */
|
|
73
|
+
export const PONG_WAIT_MS = 8_000;
|
|
74
|
+
/** 建连最多等多久(0.11.1):卡在 CONNECTING 的按一次失败算,重连 */
|
|
75
|
+
export const CONNECT_MS = 10_000;
|
|
62
76
|
/** 快捷短语太快时最多排几个(多的丢最早的) */
|
|
63
77
|
const EMOTE_QUEUE = 2;
|
|
64
78
|
|
|
@@ -79,6 +93,10 @@ export class RoomClient<A = unknown, V = unknown> {
|
|
|
79
93
|
private lastSeq = -1;
|
|
80
94
|
private retryTimer: unknown = null;
|
|
81
95
|
private beatTimer: unknown = null;
|
|
96
|
+
/** 探活(0.11.1):发了 ping 还没收到任何东西;到点还是 true 就判死 */
|
|
97
|
+
private probing = false;
|
|
98
|
+
private probeTimer: unknown = null;
|
|
99
|
+
private connectTimer: unknown = null;
|
|
82
100
|
/** 没收到 ack 的操作:重连后按原 moveId 重发 */
|
|
83
101
|
private pending = new Map<string, UpMsg<A>>();
|
|
84
102
|
private moveCounter = 0;
|
|
@@ -90,7 +108,12 @@ export class RoomClient<A = unknown, V = unknown> {
|
|
|
90
108
|
private emoteQueue: { id: number; to?: number }[] = [];
|
|
91
109
|
private emoteTimer: unknown = null;
|
|
92
110
|
private readonly opts: Required<Pick<RoomClientOptions<V>, 'random' | 'setTimer' | 'clearTimer'>> & RoomClientOptions<V>;
|
|
93
|
-
private readonly onWake = () => this.wake();
|
|
111
|
+
private readonly onWake = () => this.wake(false);
|
|
112
|
+
/** pageshow 带 persisted:页面是从往返缓存里拿回来的,旧连接不能信 */
|
|
113
|
+
private readonly onPageShow = (ev?: unknown) => this.wake((ev as { persisted?: unknown } | undefined)?.persisted === true);
|
|
114
|
+
private readonly onOnline = () => this.wake(false);
|
|
115
|
+
private readonly doc: EventSourceLike | undefined;
|
|
116
|
+
private readonly win: EventSourceLike | undefined;
|
|
94
117
|
|
|
95
118
|
constructor(opts: RoomClientOptions<V>) {
|
|
96
119
|
this.opts = {
|
|
@@ -99,9 +122,12 @@ export class RoomClient<A = unknown, V = unknown> {
|
|
|
99
122
|
clearTimer: (t) => clearTimeout(t as ReturnType<typeof setTimeout>),
|
|
100
123
|
...opts,
|
|
101
124
|
};
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
125
|
+
this.doc = opts.events ?? (typeof document !== 'undefined' ? document : undefined);
|
|
126
|
+
// pageshow、online 只在 window 上派发,挂在 document 上永远收不到(0.11.0 以前就是这样)
|
|
127
|
+
this.win = opts.windowEvents ?? opts.events ?? (typeof window !== 'undefined' ? window : undefined);
|
|
128
|
+
this.doc?.addEventListener('visibilitychange', this.onWake);
|
|
129
|
+
this.win?.addEventListener('pageshow', this.onPageShow);
|
|
130
|
+
this.win?.addEventListener('online', this.onOnline);
|
|
105
131
|
this.connect();
|
|
106
132
|
}
|
|
107
133
|
|
|
@@ -163,9 +189,9 @@ export class RoomClient<A = unknown, V = unknown> {
|
|
|
163
189
|
close(): void {
|
|
164
190
|
this.setStatus('closed');
|
|
165
191
|
this.clearTimers();
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
192
|
+
this.doc?.removeEventListener('visibilitychange', this.onWake);
|
|
193
|
+
this.win?.removeEventListener('pageshow', this.onPageShow);
|
|
194
|
+
this.win?.removeEventListener('online', this.onOnline);
|
|
169
195
|
this.ws?.close(1000, 'bye');
|
|
170
196
|
this.ws = null;
|
|
171
197
|
}
|
|
@@ -190,8 +216,14 @@ export class RoomClient<A = unknown, V = unknown> {
|
|
|
190
216
|
url.searchParams.set('cv', String(this.opts.clientVersion ?? 0));
|
|
191
217
|
const ws = new Impl(url.toString());
|
|
192
218
|
this.ws = ws;
|
|
219
|
+
this.connectTimer = this.opts.setTimer(() => {
|
|
220
|
+
this.connectTimer = null;
|
|
221
|
+
if (this.ws === ws && ws.readyState !== OPEN) this.abandon(ws);
|
|
222
|
+
}, CONNECT_MS);
|
|
193
223
|
ws.onopen = () => {
|
|
194
224
|
if (this.ws !== ws) return;
|
|
225
|
+
if (this.connectTimer !== null) this.opts.clearTimer(this.connectTimer);
|
|
226
|
+
this.connectTimer = null;
|
|
195
227
|
this.welcomed = false;
|
|
196
228
|
this.setStatus('open');
|
|
197
229
|
this.heartbeat();
|
|
@@ -199,7 +231,10 @@ export class RoomClient<A = unknown, V = unknown> {
|
|
|
199
231
|
for (const msg of this.pending.values()) this.trySend(msg);
|
|
200
232
|
};
|
|
201
233
|
ws.onmessage = (ev) => {
|
|
202
|
-
if (this.ws !== ws
|
|
234
|
+
if (this.ws !== ws) return;
|
|
235
|
+
// 收到任何东西都说明连接活着
|
|
236
|
+
this.probing = false;
|
|
237
|
+
if (typeof ev.data !== 'string' || ev.data === PONG) return;
|
|
203
238
|
let msg: DownMsg<V> | EmotedMsg;
|
|
204
239
|
try {
|
|
205
240
|
msg = JSON.parse(ev.data) as DownMsg<V> | EmotedMsg;
|
|
@@ -232,26 +267,55 @@ export class RoomClient<A = unknown, V = unknown> {
|
|
|
232
267
|
};
|
|
233
268
|
ws.onclose = (ev) => {
|
|
234
269
|
if (this.ws !== ws) return;
|
|
235
|
-
|
|
236
|
-
this.ws = null;
|
|
237
|
-
this.clearTimers();
|
|
238
|
-
if (this.status === 'closed') return;
|
|
239
|
-
if (isFinalClose(ev.code)) {
|
|
240
|
-
this.setStatus('closed', ev.code, ev.reason);
|
|
241
|
-
return;
|
|
242
|
-
}
|
|
243
|
-
// 升级被拒(4xx/5xx)时浏览器只给 1006,分不出原因;1013 是平台暂时不可用:一直进不了房间就停下,别无限重连
|
|
244
|
-
if (!entered && ++this.failures >= (this.opts.maxFailures ?? 20)) {
|
|
245
|
-
this.setStatus('failed', ev.code);
|
|
246
|
-
return;
|
|
247
|
-
}
|
|
248
|
-
this.scheduleRetry(ev.code);
|
|
270
|
+
this.lost(ev.code, ev.reason);
|
|
249
271
|
};
|
|
250
272
|
ws.onerror = () => {
|
|
251
273
|
// 之后一定会有 onclose,在那里处理
|
|
252
274
|
};
|
|
253
275
|
}
|
|
254
276
|
|
|
277
|
+
/** 这条连接断了(或者被判死了):最终关闭码停下,没进过房间的累计失败次数,其余按退避重连 */
|
|
278
|
+
private lost(code: number, reason?: string): void {
|
|
279
|
+
const entered = this.status === 'open' && this.welcomed;
|
|
280
|
+
this.ws = null;
|
|
281
|
+
this.clearTimers();
|
|
282
|
+
if (this.status === 'closed') return;
|
|
283
|
+
if (isFinalClose(code)) {
|
|
284
|
+
this.setStatus('closed', code, reason);
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
// 升级被拒(4xx/5xx)时浏览器只给 1006,分不出原因;1013 是平台暂时不可用:一直进不了房间就停下,别无限重连
|
|
288
|
+
if (!entered && ++this.failures >= (this.opts.maxFailures ?? 20)) {
|
|
289
|
+
this.setStatus('failed', code);
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
this.scheduleRetry(code);
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/** 不等 close 了:摘掉回调、关掉,按 1006(网络断了)走重连。死连接的 close 可能几分钟后才来,也可能不来 */
|
|
296
|
+
private abandon(ws: WebSocketLike): void {
|
|
297
|
+
if (this.ws !== ws) return;
|
|
298
|
+
ws.onopen = ws.onmessage = ws.onclose = ws.onerror = null;
|
|
299
|
+
try {
|
|
300
|
+
ws.close();
|
|
301
|
+
} catch {
|
|
302
|
+
// 已经坏了
|
|
303
|
+
}
|
|
304
|
+
this.lost(1006);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/** 发一个 ping,PONG_WAIT_MS 内什么都没收到就判死(已经在探就不重复发) */
|
|
308
|
+
private probe(): void {
|
|
309
|
+
const ws = this.ws;
|
|
310
|
+
if (!ws || ws.readyState !== OPEN || this.probeTimer !== null) return;
|
|
311
|
+
this.probing = true;
|
|
312
|
+
this.trySend(PING);
|
|
313
|
+
this.probeTimer = this.opts.setTimer(() => {
|
|
314
|
+
this.probeTimer = null;
|
|
315
|
+
if (this.ws === ws && this.probing) this.abandon(ws);
|
|
316
|
+
}, PONG_WAIT_MS);
|
|
317
|
+
}
|
|
318
|
+
|
|
255
319
|
/** 带上这次的关闭码:游戏据此区分"网络断了"(1006)和"平台有点忙"(1013)。 */
|
|
256
320
|
private scheduleRetry(code: number): void {
|
|
257
321
|
this.setStatus('reconnecting', code);
|
|
@@ -262,34 +326,48 @@ export class RoomClient<A = unknown, V = unknown> {
|
|
|
262
326
|
}, wait);
|
|
263
327
|
}
|
|
264
328
|
|
|
265
|
-
/**
|
|
266
|
-
|
|
329
|
+
/**
|
|
330
|
+
* 切回前台、网络恢复:
|
|
331
|
+
* - 连着:探一下活(静默死掉的会在 PONG_WAIT_MS 后判死、重连);
|
|
332
|
+
* - 在等退避:别等了,马上连;
|
|
333
|
+
* - 有连接却不是 OPEN、也不在建连(CLOSING、CLOSED 却一直没等到 close,从往返缓存回来常见):扔掉,马上连;
|
|
334
|
+
* - fresh(pageshow 带 persisted):不管什么状态,旧连接一律扔掉重连。
|
|
335
|
+
*/
|
|
336
|
+
private wake(fresh: boolean): void {
|
|
267
337
|
if (this.status === 'closed' || this.status === 'failed' || this.opts.isHidden?.() || (typeof document !== 'undefined' && document.hidden)) return;
|
|
268
|
-
|
|
269
|
-
|
|
338
|
+
const ws = this.ws;
|
|
339
|
+
if (ws && (fresh || (ws.readyState !== OPEN && ws.readyState !== 0))) {
|
|
340
|
+
// 扔掉以后按断线走一遍(状态、失败次数照常算),再立刻连,不等退避
|
|
341
|
+
this.abandon(ws);
|
|
342
|
+
this.reconnectNow();
|
|
270
343
|
return;
|
|
271
344
|
}
|
|
272
|
-
if (
|
|
273
|
-
this.
|
|
274
|
-
|
|
275
|
-
this.connect();
|
|
345
|
+
if (ws && ws.readyState === OPEN) {
|
|
346
|
+
this.probe();
|
|
347
|
+
return;
|
|
276
348
|
}
|
|
349
|
+
if (!ws) this.reconnectNow();
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
/** 正在等退避的话,取消等待、马上连 */
|
|
353
|
+
private reconnectNow(): void {
|
|
354
|
+
if (this.retryTimer === null) return;
|
|
355
|
+
this.opts.clearTimer(this.retryTimer);
|
|
356
|
+
this.retryTimer = null;
|
|
357
|
+
this.connect();
|
|
277
358
|
}
|
|
278
359
|
|
|
279
360
|
private heartbeat(): void {
|
|
280
361
|
this.beatTimer = this.opts.setTimer(() => {
|
|
281
|
-
this.
|
|
362
|
+
this.probe();
|
|
282
363
|
this.heartbeat();
|
|
283
364
|
}, HEARTBEAT_MS);
|
|
284
365
|
}
|
|
285
366
|
|
|
286
367
|
private clearTimers(): void {
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
this.
|
|
290
|
-
if (this.beatTimer !== null) this.opts.clearTimer(this.beatTimer);
|
|
291
|
-
this.retryTimer = null;
|
|
292
|
-
this.beatTimer = null;
|
|
368
|
+
for (const t of [this.retryTimer, this.emoteTimer, this.beatTimer, this.probeTimer, this.connectTimer]) if (t !== null) this.opts.clearTimer(t);
|
|
369
|
+
this.retryTimer = this.emoteTimer = this.beatTimer = this.probeTimer = this.connectTimer = null;
|
|
370
|
+
this.probing = false;
|
|
293
371
|
}
|
|
294
372
|
|
|
295
373
|
private trySend(msg: UpMsg<A> | typeof PING): void {
|