@yyyu-star/arcade-kit 0.19.0 → 0.20.0
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 +29 -0
- package/README.md +43 -0
- package/dist/client.d.ts +44 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +103 -0
- package/dist/client.js.map +1 -1
- package/dist/fun-logic.d.ts +14 -2
- package/dist/fun-logic.d.ts.map +1 -1
- package/dist/fun-logic.js +19 -4
- package/dist/fun-logic.js.map +1 -1
- package/dist/game.d.ts +7 -0
- package/dist/game.d.ts.map +1 -1
- package/dist/game.js +38 -0
- package/dist/game.js.map +1 -1
- package/dist/internal.d.ts +4 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +6 -0
- package/dist/internal.js.map +1 -1
- package/dist/match.d.ts +85 -0
- package/dist/match.d.ts.map +1 -0
- package/dist/match.js +361 -0
- package/dist/match.js.map +1 -0
- package/dist/meter.d.ts +38 -0
- package/dist/meter.d.ts.map +1 -1
- package/dist/meter.js +56 -14
- package/dist/meter.js.map +1 -1
- package/dist/protocol.d.ts +35 -0
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js.map +1 -1
- package/dist/room.d.ts +48 -1
- package/dist/room.d.ts.map +1 -1
- package/dist/room.js +157 -17
- package/dist/room.js.map +1 -1
- package/dist/table-chat.d.ts +2 -0
- package/dist/table-chat.d.ts.map +1 -1
- package/dist/table-chat.js +25 -2
- package/dist/table-chat.js.map +1 -1
- package/dist/table-fun.d.ts.map +1 -1
- package/dist/table-fun.js +4 -4
- package/dist/table-fun.js.map +1 -1
- package/dist/worker.d.ts +12 -0
- package/dist/worker.d.ts.map +1 -1
- package/dist/worker.js +44 -1
- package/dist/worker.js.map +1 -1
- package/package.json +5 -1
- package/src/client.ts +118 -1
- package/src/fun-logic.ts +31 -4
- package/src/game.ts +40 -0
- package/src/internal.ts +8 -0
- package/src/match.ts +371 -0
- package/src/meter.ts +68 -12
- package/src/protocol.ts +41 -0
- package/src/room.ts +171 -18
- package/src/table-chat.ts +25 -3
- package/src/table-fun.ts +4 -3
- package/src/worker.ts +44 -2
package/dist/match.js
ADDED
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 快速匹配的排队(0.20.0,设计 docs/match.md):游戏 Worker 里的 Durable Object 继承它,填上一桌几个真人,就能按档位排队凑桌。
|
|
3
|
+
* 每个档位一个实例(matchStub 按档位取),浏览器经 worker.ts 的 acceptMatch 连进来,连接本身就是"排着"。
|
|
4
|
+
*
|
|
5
|
+
* 守的规矩(和房间同一套,docs/platform-backend.md 第 4 节):
|
|
6
|
+
* - 0 行存储:排着的人就是 ctx.getWebSockets(),附件里只放 userId、昵称、开始排的时间;被驱逐后名单还在;
|
|
7
|
+
* - 只用一个闹钟:最早那个人等满 waitMs 的时刻,只往早了调(setAlarm 也算一行写入);
|
|
8
|
+
* - 只用 ctx.acceptWebSocket,不用 setTimeout / setInterval;排队连接只收不发,浏览器发什么都 1008 断开;
|
|
9
|
+
* - 不碰牌局:不 import 规则、不读房间状态。电脑补位、公平底线全在房间里,和好友房一样;
|
|
10
|
+
* - 名额由房间开桌时向计量一次占齐(kitCreateMatch),排队本身不占。
|
|
11
|
+
*/
|
|
12
|
+
import { DurableObject } from 'cloudflare:workers';
|
|
13
|
+
import { KIT_HOST, newRoomCode, parseIdentity, roomStub } from './internal.js';
|
|
14
|
+
import { CLOSE } from './protocol.js';
|
|
15
|
+
/** 开桌时房间码撞了最多再换几次 */
|
|
16
|
+
const CODE_TRIES = 5;
|
|
17
|
+
/** 一次凑桌最多重来几轮(有人被计量挡掉、请出去以后接着凑) */
|
|
18
|
+
const FORM_ROUNDS = 8;
|
|
19
|
+
/** 平台屏蔽名单一次最多问几个人(平台 blockedAmong 的上限,德州 9 人桌) */
|
|
20
|
+
const BLOCK_MAX = 9;
|
|
21
|
+
/**
|
|
22
|
+
* 凑桌时找平台、找房间最多等多久(毫秒,安全审阅 0.20.0):凑桌持着"正在凑"的锁,平台或房间卡住时整个档位都会一直"等待中"。
|
|
23
|
+
* 超时的屏蔽名单按空的算,建房按 unavailable(这一桌的人转单机)
|
|
24
|
+
*/
|
|
25
|
+
export const MATCH_CALL_MS = 3_000;
|
|
26
|
+
export class MatchQueue extends DurableObject {
|
|
27
|
+
/** 最多等多久(毫秒):到点 ≥ 2 人就开,只剩自己就转单机 */
|
|
28
|
+
waitMs = 15_000;
|
|
29
|
+
/** 一个档位最多排几个人,满了 1013(挡刷连接) */
|
|
30
|
+
maxQueue = 200;
|
|
31
|
+
/** 每人每小时最多排几次,超了 4029(内存里记,被驱逐就清零,接受) */
|
|
32
|
+
perHour = 30;
|
|
33
|
+
/** 凑桌时找平台、找房间最多等多久(毫秒,见 MATCH_CALL_MS) */
|
|
34
|
+
callMs = MATCH_CALL_MS;
|
|
35
|
+
/** 这个档位一桌最多几个真人;默认 seats */
|
|
36
|
+
tableSize(_tier) {
|
|
37
|
+
return this.seats;
|
|
38
|
+
}
|
|
39
|
+
/** 这个档位开桌带的开局选项(交给房间的 RoomGame.options 校验);默认不带 */
|
|
40
|
+
roomOptions(_tier) {
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 这几个人之间谁屏蔽了谁(平台 0.25.0 的 ARCADE.blockedAmong,最多 9 人,只读)。没有平台(单独部署)、出错都当没有,回 []。
|
|
45
|
+
* 测试覆盖它换成假名单
|
|
46
|
+
*/
|
|
47
|
+
async blockedAmong(userIds) {
|
|
48
|
+
const arcade = this.env.ARCADE;
|
|
49
|
+
if (!arcade || userIds.length < 2)
|
|
50
|
+
return [];
|
|
51
|
+
try {
|
|
52
|
+
const out = await arcade.blockedAmong(userIds.slice(0, BLOCK_MAX));
|
|
53
|
+
return Array.isArray(out) ? out.filter((p) => Array.isArray(p) && typeof p[0] === 'string' && typeof p[1] === 'string') : [];
|
|
54
|
+
}
|
|
55
|
+
catch (e) {
|
|
56
|
+
console.error('blockedAmong failed, matching without it', e instanceof Error ? e.message : e);
|
|
57
|
+
return [];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/** 开一张匹配桌(房间的 kitCreateMatch)。游戏不用覆盖;kit 的测试用它模拟房间卡住 */
|
|
61
|
+
createMatchRoom(code, players, opts) {
|
|
62
|
+
const stub = roomStub(this.env.ROOM, code);
|
|
63
|
+
return stub.kitCreateMatch(code, players, opts);
|
|
64
|
+
}
|
|
65
|
+
/** 现在设着的闹钟;undefined 是还不知道,用前 getAlarm() 读 */
|
|
66
|
+
alarmAt;
|
|
67
|
+
/** 正在凑桌(中间 await 了平台和房间):这时进来的人、到点的闹钟只记一笔,凑完再来一轮 */
|
|
68
|
+
forming = false;
|
|
69
|
+
again = false;
|
|
70
|
+
/** 凑桌途中已经选中的人:别的一轮不再选他们 */
|
|
71
|
+
taken = new Set();
|
|
72
|
+
/** 每人这一小时排了几次 */
|
|
73
|
+
hourly = new Map();
|
|
74
|
+
constructor(ctx, env) {
|
|
75
|
+
super(ctx, env);
|
|
76
|
+
ctx.setWebSocketAutoResponse(new WebSocketRequestResponsePair('ping', 'pong'));
|
|
77
|
+
}
|
|
78
|
+
/** 入队:只认 kit 自己拼的内部地址(worker.ts 的 acceptMatch),身份在 x-kit-user 头里。 */
|
|
79
|
+
async fetch(request) {
|
|
80
|
+
const url = new URL(request.url);
|
|
81
|
+
if (url.hostname !== KIT_HOST || url.pathname !== '/match' || request.headers.get('upgrade')?.toLowerCase() !== 'websocket') {
|
|
82
|
+
return new Response('not a kit request', { status: 400 });
|
|
83
|
+
}
|
|
84
|
+
const me = parseIdentity(request.headers.get('x-kit-user'));
|
|
85
|
+
const tier = url.searchParams.get('tier');
|
|
86
|
+
if (!me || !tier)
|
|
87
|
+
return new Response('no identity', { status: 401 });
|
|
88
|
+
const pair = new WebSocketPair();
|
|
89
|
+
const [client, server] = [pair[0], pair[1]];
|
|
90
|
+
this.ctx.acceptWebSocket(server);
|
|
91
|
+
const done = new Response(null, { status: 101, webSocket: client });
|
|
92
|
+
const now = Date.now();
|
|
93
|
+
// 只数还排着的(附件还在):已经出队、正在关的连接不占队长
|
|
94
|
+
const others = this.waiting().filter((o) => o !== server);
|
|
95
|
+
const mine = others.filter((o) => waiterOf(o)?.userId === me.userId);
|
|
96
|
+
if (others.length - mine.length >= this.maxQueue) {
|
|
97
|
+
server.close(CLOSE.tryLater, 'queue full');
|
|
98
|
+
return done;
|
|
99
|
+
}
|
|
100
|
+
// 一小时前的旧条目顺手清掉(排过一次就走的人不能让这张表一直涨)
|
|
101
|
+
for (const [u, ts] of this.hourly)
|
|
102
|
+
if (now - ts[ts.length - 1] >= 3_600_000)
|
|
103
|
+
this.hourly.delete(u);
|
|
104
|
+
const times = (this.hourly.get(me.userId) ?? []).filter((t) => now - t < 3_600_000);
|
|
105
|
+
if (times.length >= this.perHour) {
|
|
106
|
+
this.hourly.set(me.userId, times);
|
|
107
|
+
server.close(CLOSE.tooManyJoins, 'too often');
|
|
108
|
+
return done;
|
|
109
|
+
}
|
|
110
|
+
times.push(now);
|
|
111
|
+
this.hourly.set(me.userId, times);
|
|
112
|
+
// 同一个人只排一次:旧的那条让位
|
|
113
|
+
for (const o of mine)
|
|
114
|
+
this.drop(o, CLOSE.replaced, 'replaced');
|
|
115
|
+
server.serializeAttachment({ userId: me.userId, name: me.name, since: now, tier });
|
|
116
|
+
// 先回 101 再凑桌:凑桌要找平台、房间,不能让新来的人连连接都拿不到
|
|
117
|
+
this.ctx.waitUntil(this.form());
|
|
118
|
+
return done;
|
|
119
|
+
}
|
|
120
|
+
/** 排队连接只收不发:发什么都断开(不让它变成能刷的入口) */
|
|
121
|
+
async webSocketMessage(ws) {
|
|
122
|
+
this.drop(ws, CLOSE.policy, 'queue is receive-only');
|
|
123
|
+
this.pushWaiting();
|
|
124
|
+
}
|
|
125
|
+
async webSocketClose(ws, code) {
|
|
126
|
+
try {
|
|
127
|
+
ws.close(code === 1005 || code === 1006 ? 1000 : code, 'bye');
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
// 已经关了
|
|
131
|
+
}
|
|
132
|
+
ws.serializeAttachment(null);
|
|
133
|
+
this.pushWaiting();
|
|
134
|
+
}
|
|
135
|
+
async webSocketError(ws) {
|
|
136
|
+
ws.serializeAttachment(null);
|
|
137
|
+
this.pushWaiting();
|
|
138
|
+
}
|
|
139
|
+
async alarm() {
|
|
140
|
+
this.alarmAt = null;
|
|
141
|
+
try {
|
|
142
|
+
await this.form();
|
|
143
|
+
}
|
|
144
|
+
catch (e) {
|
|
145
|
+
// 闹钟里不往外抛(会自动重试、每次计费)
|
|
146
|
+
console.error('match alarm failed', e instanceof Error ? e.message : e);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
// ---------- 凑桌 ----------
|
|
150
|
+
/**
|
|
151
|
+
* 凑一轮:凑满一桌立刻开;最早的人等够了:≥ 2 人就开,只剩自己转单机。凑完还有人就把闹钟对到下一个人。
|
|
152
|
+
* 凑桌中间要 await(平台、房间),这时别的入口进来只记 again,凑完再来一轮
|
|
153
|
+
*/
|
|
154
|
+
async form() {
|
|
155
|
+
if (this.forming) {
|
|
156
|
+
this.again = true;
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
this.forming = true;
|
|
160
|
+
try {
|
|
161
|
+
let rounds = 0;
|
|
162
|
+
do {
|
|
163
|
+
this.again = false;
|
|
164
|
+
while (rounds++ < FORM_ROUNDS && (await this.formOnce()))
|
|
165
|
+
;
|
|
166
|
+
} while (this.again && rounds < FORM_ROUNDS);
|
|
167
|
+
}
|
|
168
|
+
finally {
|
|
169
|
+
this.forming = false;
|
|
170
|
+
this.taken.clear();
|
|
171
|
+
}
|
|
172
|
+
this.pushWaiting();
|
|
173
|
+
await this.planAlarm();
|
|
174
|
+
}
|
|
175
|
+
/** 凑一桌;凑出了(或者有人被请出去了)回 true,接着凑下一桌 */
|
|
176
|
+
async formOnce() {
|
|
177
|
+
const list = this.queue().filter((w) => !this.taken.has(w.me.userId));
|
|
178
|
+
if (!list.length)
|
|
179
|
+
return false;
|
|
180
|
+
const tier = list[0].me.tier;
|
|
181
|
+
const size = Math.max(1, Math.min(this.tableSize(tier), BLOCK_MAX));
|
|
182
|
+
const due = Date.now() >= list[0].me.since + this.waitMs;
|
|
183
|
+
if (list.length < size && !due)
|
|
184
|
+
return false;
|
|
185
|
+
const blocks = await withTimeout(this.blockedAmong(list.slice(0, BLOCK_MAX).map((w) => w.me.userId)), this.callMs).catch((e) => {
|
|
186
|
+
console.error('blockedAmong timed out, matching without it', e instanceof Error ? e.message : e);
|
|
187
|
+
return [];
|
|
188
|
+
});
|
|
189
|
+
const chosen = [];
|
|
190
|
+
for (const w of list.slice(0, BLOCK_MAX)) {
|
|
191
|
+
if (chosen.length >= size)
|
|
192
|
+
break;
|
|
193
|
+
if (chosen.some((c) => blocks.some(([a, b]) => (a === c.me.userId && b === w.me.userId) || (a === w.me.userId && b === c.me.userId))))
|
|
194
|
+
continue;
|
|
195
|
+
chosen.push(w);
|
|
196
|
+
}
|
|
197
|
+
if (chosen.length < size && !due)
|
|
198
|
+
return false;
|
|
199
|
+
if (chosen.length < 2) {
|
|
200
|
+
// 等够了却只有自己(或者在的人都和他互相屏蔽):转单机
|
|
201
|
+
this.solo(chosen[0].ws, 'alone');
|
|
202
|
+
return true;
|
|
203
|
+
}
|
|
204
|
+
for (const c of chosen)
|
|
205
|
+
this.taken.add(c.me.userId);
|
|
206
|
+
const players = chosen.map((c) => ({ userId: c.me.userId, name: c.me.name }));
|
|
207
|
+
let out = { r: 'unavailable' };
|
|
208
|
+
let code = '';
|
|
209
|
+
for (let i = 0; i < CODE_TRIES; i++) {
|
|
210
|
+
code = newRoomCode();
|
|
211
|
+
try {
|
|
212
|
+
out = await withTimeout(this.createMatchRoom(code, players, this.roomOptions(tier)), this.callMs);
|
|
213
|
+
}
|
|
214
|
+
catch (e) {
|
|
215
|
+
console.error('kitCreateMatch failed', e instanceof Error ? e.message : e);
|
|
216
|
+
out = { r: 'unavailable' };
|
|
217
|
+
}
|
|
218
|
+
if (out.r !== 'exists')
|
|
219
|
+
break;
|
|
220
|
+
}
|
|
221
|
+
for (const c of chosen)
|
|
222
|
+
this.taken.delete(c.me.userId);
|
|
223
|
+
// 等的这一会儿可能有人走了、换了页面:按 userId 找他现在的连接
|
|
224
|
+
const sockOf = (userId) => this.waiting().find((ws) => waiterOf(ws)?.userId === userId);
|
|
225
|
+
if (out.r === 'created') {
|
|
226
|
+
for (const c of chosen) {
|
|
227
|
+
const ws = sockOf(c.me.userId);
|
|
228
|
+
if (ws)
|
|
229
|
+
this.finish(ws, { t: 'matched', code });
|
|
230
|
+
}
|
|
231
|
+
return true;
|
|
232
|
+
}
|
|
233
|
+
if (out.r === 'refused') {
|
|
234
|
+
if (out.userId === null) {
|
|
235
|
+
// 全站忙:这一轮的人都转单机,其他人留着(到点还会被同样挡掉)
|
|
236
|
+
for (const c of chosen) {
|
|
237
|
+
const ws = sockOf(c.me.userId);
|
|
238
|
+
if (ws)
|
|
239
|
+
this.solo(ws, 'busy');
|
|
240
|
+
}
|
|
241
|
+
return true;
|
|
242
|
+
}
|
|
243
|
+
const ws = sockOf(out.userId);
|
|
244
|
+
if (ws) {
|
|
245
|
+
if (out.why === 'has_room')
|
|
246
|
+
this.finish(ws, { t: 'has_room', code: out.code });
|
|
247
|
+
else
|
|
248
|
+
this.solo(ws, 'daily_limit');
|
|
249
|
+
return true;
|
|
250
|
+
}
|
|
251
|
+
return true;
|
|
252
|
+
}
|
|
253
|
+
// 房间那边出错、超时、选项不对:这一轮的人转单机,不让他们一直等。
|
|
254
|
+
// bad / bad_options 是游戏配错了(tableSize 比这一局的座位多、roomOptions 过不了 RoomGame.options),每桌都会这样:
|
|
255
|
+
// 大声记日志;游戏在自己的测试里用 game.ts 的 matchConfigErrors 先查
|
|
256
|
+
if (out.r === 'bad' || out.r === 'bad_options')
|
|
257
|
+
console.error(`MatchQueue misconfigured for tier ${tier}: room said ${out.r} (check tableSize / roomOptions with matchConfigErrors)`);
|
|
258
|
+
else
|
|
259
|
+
console.error('match room not created', out.r);
|
|
260
|
+
for (const c of chosen) {
|
|
261
|
+
const ws = sockOf(c.me.userId);
|
|
262
|
+
if (ws)
|
|
263
|
+
this.solo(ws, 'unavailable');
|
|
264
|
+
}
|
|
265
|
+
// 房间那边不好(超时、出错):这一次不接着凑,剩下的人等下一次闹钟,不让锁一直被连着的超时占着
|
|
266
|
+
this.again = false;
|
|
267
|
+
return false;
|
|
268
|
+
}
|
|
269
|
+
/** 只往早了调闹钟:最早那个人等够的时刻 */
|
|
270
|
+
async planAlarm() {
|
|
271
|
+
const list = this.queue();
|
|
272
|
+
if (!list.length)
|
|
273
|
+
return;
|
|
274
|
+
const next = list[0].me.since + this.waitMs;
|
|
275
|
+
if (this.alarmAt === undefined)
|
|
276
|
+
this.alarmAt = await this.ctx.storage.getAlarm();
|
|
277
|
+
if (this.alarmAt !== null && this.alarmAt <= next && this.alarmAt > Date.now() - 1_000)
|
|
278
|
+
return;
|
|
279
|
+
this.alarmAt = next;
|
|
280
|
+
try {
|
|
281
|
+
await this.ctx.storage.setAlarm(next);
|
|
282
|
+
}
|
|
283
|
+
catch (e) {
|
|
284
|
+
console.error('match setAlarm failed', e instanceof Error ? e.message : e);
|
|
285
|
+
this.alarmAt = undefined;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
// ---------- 连接 ----------
|
|
289
|
+
sockets() {
|
|
290
|
+
return this.ctx.getWebSockets();
|
|
291
|
+
}
|
|
292
|
+
waiting() {
|
|
293
|
+
return this.sockets().filter((ws) => waiterOf(ws) !== null);
|
|
294
|
+
}
|
|
295
|
+
/** 排着的人,按开始排的先后;同一个人只算最新的那条 */
|
|
296
|
+
queue() {
|
|
297
|
+
const by = new Map();
|
|
298
|
+
for (const ws of this.waiting()) {
|
|
299
|
+
const me = waiterOf(ws);
|
|
300
|
+
const had = by.get(me.userId);
|
|
301
|
+
if (!had || had.me.since <= me.since)
|
|
302
|
+
by.set(me.userId, { ws, me });
|
|
303
|
+
}
|
|
304
|
+
return [...by.values()].sort((a, b) => a.me.since - b.me.since);
|
|
305
|
+
}
|
|
306
|
+
/** 人数变了就推一次(不每秒推,页面自己倒计时) */
|
|
307
|
+
pushWaiting() {
|
|
308
|
+
const list = this.queue();
|
|
309
|
+
if (!list.length)
|
|
310
|
+
return;
|
|
311
|
+
// 倒计时按最早的那个人算:他到点时大家一起凑,后来的人等不满 waitMs
|
|
312
|
+
const left = Math.max(0, list[0].me.since + this.waitMs - Date.now());
|
|
313
|
+
const msg = { t: 'waiting', n: list.length, seats: this.tableSize(list[0].me.tier), left };
|
|
314
|
+
for (const { ws } of list)
|
|
315
|
+
send(ws, msg);
|
|
316
|
+
}
|
|
317
|
+
solo(ws, why) {
|
|
318
|
+
this.finish(ws, { t: 'solo', why });
|
|
319
|
+
}
|
|
320
|
+
/** 发最后一条,出队、关掉 */
|
|
321
|
+
finish(ws, msg) {
|
|
322
|
+
send(ws, msg);
|
|
323
|
+
this.drop(ws, 1000, msg.t);
|
|
324
|
+
}
|
|
325
|
+
drop(ws, code, reason) {
|
|
326
|
+
ws.serializeAttachment(null);
|
|
327
|
+
try {
|
|
328
|
+
ws.close(code, reason);
|
|
329
|
+
}
|
|
330
|
+
catch {
|
|
331
|
+
// 已经关了
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
function waiterOf(ws) {
|
|
336
|
+
const a = ws.deserializeAttachment();
|
|
337
|
+
return a && typeof a.userId === 'string' ? a : null;
|
|
338
|
+
}
|
|
339
|
+
function send(ws, msg) {
|
|
340
|
+
try {
|
|
341
|
+
ws.send(JSON.stringify(msg));
|
|
342
|
+
}
|
|
343
|
+
catch {
|
|
344
|
+
// 连接正在关
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* 等一个外部调用最多 ms 毫秒,超时抛错(调用方按失败处理)。只在凑桌这一次请求里等,不是房间的状态计时,
|
|
349
|
+
* 所以用运行时的 scheduler.wait(不是 setTimeout、也不占那一个闹钟)
|
|
350
|
+
*/
|
|
351
|
+
async function withTimeout(p, ms) {
|
|
352
|
+
// 超时以后原来的调用照样可能失败:先接住它的错,免得变成没人处理的 rejection
|
|
353
|
+
const settled = p.then((v) => ({ ok: true, v }), (e) => ({ ok: false, e }));
|
|
354
|
+
const out = await Promise.race([settled, scheduler.wait(ms).then(() => null)]);
|
|
355
|
+
if (out === null)
|
|
356
|
+
throw new Error(`timed out after ${ms} ms`);
|
|
357
|
+
if (!out.ok)
|
|
358
|
+
throw out.e;
|
|
359
|
+
return out.v;
|
|
360
|
+
}
|
|
361
|
+
//# sourceMappingURL=match.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"match.js","sourceRoot":"","sources":["../src/match.ts"],"names":[],"mappings":"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"}
|
package/dist/meter.d.ts
CHANGED
|
@@ -60,6 +60,29 @@ export type Reserve = {
|
|
|
60
60
|
ok: false;
|
|
61
61
|
error: 'daily_limit' | 'busy';
|
|
62
62
|
};
|
|
63
|
+
/** 几个人一起占(0.20.0):被挡时 userId 是第一个被挡的人;全站忙(busy)不是哪一个人的事,userId 为 null */
|
|
64
|
+
export type ReserveMany = {
|
|
65
|
+
ok: true;
|
|
66
|
+
} | {
|
|
67
|
+
ok: false;
|
|
68
|
+
userId: string;
|
|
69
|
+
error: 'has_room';
|
|
70
|
+
code: string;
|
|
71
|
+
} | {
|
|
72
|
+
ok: false;
|
|
73
|
+
userId: string;
|
|
74
|
+
error: 'daily_limit';
|
|
75
|
+
} | {
|
|
76
|
+
ok: false;
|
|
77
|
+
userId: null;
|
|
78
|
+
error: 'busy';
|
|
79
|
+
};
|
|
80
|
+
/** kitPeek 的结果(0.20.0):room 是这个人开着的房间码,daily 是今天的开房次数用完了 */
|
|
81
|
+
export interface Peek {
|
|
82
|
+
room: string | null;
|
|
83
|
+
daily: boolean;
|
|
84
|
+
level: MeterLevel;
|
|
85
|
+
}
|
|
63
86
|
export interface Usage {
|
|
64
87
|
day: string;
|
|
65
88
|
writes: number;
|
|
@@ -72,11 +95,26 @@ export declare class RoomMeter extends DurableObject<MeterEnv> {
|
|
|
72
95
|
private limitsCache;
|
|
73
96
|
/** 开房前占一个名额(房间调)。房间没建成要调 kitRelease(…, cancel) 退回。 */
|
|
74
97
|
kitReserve(userId: string, code: string, until: number): Promise<Reserve>;
|
|
98
|
+
/**
|
|
99
|
+
* 一张桌给几个人一起占名额(0.20.0,快速匹配):要么都占上,要么一个都不占,占不上的回第一个被挡的人。
|
|
100
|
+
* 全站开房数只记 1(一张桌一个房间)。一次写 1 + 人数 行(每人那一行加当天那一行),写在计量里、记进当天的数,不算房间的"每步 ≤ 2 行"
|
|
101
|
+
*/
|
|
102
|
+
kitReserveMany(userIds: readonly string[], code: string, until: number): Promise<ReserveMany>;
|
|
75
103
|
/**
|
|
76
104
|
* 房间结束(打完、关掉)时还名额,顺便报最后一批写入(writes 可以是 0)。cancel:房间没建成,开房次数也退回。
|
|
77
105
|
* 名额已经不在(还过一次、或者已经到点作废)就只记写入,可以重复调。
|
|
78
106
|
*/
|
|
79
107
|
kitRelease(userId: string, code: string, writes: number, cancel?: boolean): Promise<MeterLevel>;
|
|
108
|
+
/**
|
|
109
|
+
* 一张桌的几个人一起还(0.20.0)。cancel:开房次数也退回;room:全站开房数也退 1(默认跟着 cancel:整桌没建成)。
|
|
110
|
+
* 匹配桌开打时没来的人(0.20.0)是 cancel 但不退全站数:桌子开成了,只是他的那一份退给他
|
|
111
|
+
*/
|
|
112
|
+
kitReleaseMany(userIds: readonly string[], code: string, writes: number, cancel?: boolean, room?: boolean): Promise<MeterLevel>;
|
|
113
|
+
/**
|
|
114
|
+
* 只读(0.20.0,快速匹配入队前问):这个人现在开着的房间(没有为 null)、今天的开房次数用完没有、全站的门槛。
|
|
115
|
+
* 入队前就挡掉"有房间""今天用完了""联机忙"的人,不让他们白等 15 秒
|
|
116
|
+
*/
|
|
117
|
+
kitPeek(userId: string): Promise<Peek>;
|
|
80
118
|
/** 报一批写入(房间攒够一批时调),回现在的门槛。 */
|
|
81
119
|
kitReport(writes: number): Promise<MeterLevel>;
|
|
82
120
|
/** 只读:现在的门槛(房间放新人进来之前问,不写库)。 */
|
package/dist/meter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meter.d.ts","sourceRoot":"","sources":["../src/meter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,MAAM,WAAW,WAAW;IAC1B,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,uBAAuB;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uBAAuB;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,aAAa,EAAE,WAS3B,CAAC;AAEF,6EAA6E;AAC7E,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAA8B,CAAC;AAE9E,wCAAwC;AACxC,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,EAAE,sBAAsB,CAAC;IAC/B,2FAA2F;IAC3F,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,MAAM,CAAC;CACzF;AAED,4CAA4C;AAC5C,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;AAEhD,MAAM,MAAM,OAAO,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAAA;CAAE,CAAC;AAEnI,MAAM,WAAW,KAAK;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,UAAU,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;CACrB;AAaD,qBAAa,SAAU,SAAQ,aAAa,CAAC,QAAQ,CAAC;IACpD,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,WAAW,CAA4B;IAE/C,sDAAsD;IAChD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"meter.d.ts","sourceRoot":"","sources":["../src/meter.ts"],"names":[],"mappings":"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"}
|
package/dist/meter.js
CHANGED
|
@@ -38,20 +38,33 @@ export class RoomMeter extends DurableObject {
|
|
|
38
38
|
limitsCache = null;
|
|
39
39
|
/** 开房前占一个名额(房间调)。房间没建成要调 kitRelease(…, cancel) 退回。 */
|
|
40
40
|
async kitReserve(userId, code, until) {
|
|
41
|
+
const r = await this.kitReserveMany([userId], code, until);
|
|
42
|
+
return r.ok ? r : r.error === 'has_room' ? { ok: false, error: 'has_room', code: r.code } : { ok: false, error: r.error };
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* 一张桌给几个人一起占名额(0.20.0,快速匹配):要么都占上,要么一个都不占,占不上的回第一个被挡的人。
|
|
46
|
+
* 全站开房数只记 1(一张桌一个房间)。一次写 1 + 人数 行(每人那一行加当天那一行),写在计量里、记进当天的数,不算房间的"每步 ≤ 2 行"
|
|
47
|
+
*/
|
|
48
|
+
async kitReserveMany(userIds, code, until) {
|
|
41
49
|
const now = Date.now();
|
|
42
50
|
const lim = this.limits();
|
|
43
51
|
const day = this.day(now);
|
|
44
|
-
const
|
|
52
|
+
const users = userIds.map((id) => ({ id, row: this.user(id, day.day, now) }));
|
|
45
53
|
// 先说"回你的房间":在打的房间不受全站门槛影响,回去照样能玩
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
54
|
+
for (const { id, row } of users)
|
|
55
|
+
if (row.live.length >= lim.roomsPerUser)
|
|
56
|
+
return { ok: false, userId: id, error: 'has_room', code: row.live[row.live.length - 1].code };
|
|
57
|
+
for (const { id, row } of users)
|
|
58
|
+
if (row.count >= lim.dailyRoomsPerUser)
|
|
59
|
+
return { ok: false, userId: id, error: 'daily_limit' };
|
|
50
60
|
if (levelOf(day.writes, lim) !== 'ok' || day.rooms >= lim.dailyRooms)
|
|
51
|
-
return { ok: false, error: 'busy' };
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
61
|
+
return { ok: false, userId: null, error: 'busy' };
|
|
62
|
+
let w = 0;
|
|
63
|
+
for (const { id, row } of users) {
|
|
64
|
+
row.count++;
|
|
65
|
+
row.live.push({ code, until: until + EXPIRY_SLACK_MS });
|
|
66
|
+
w += this.saveUser(id, row);
|
|
67
|
+
}
|
|
55
68
|
this.saveDay(day.day, day.writes + w + 1, day.rooms + 1);
|
|
56
69
|
return { ok: true };
|
|
57
70
|
}
|
|
@@ -60,22 +73,51 @@ export class RoomMeter extends DurableObject {
|
|
|
60
73
|
* 名额已经不在(还过一次、或者已经到点作废)就只记写入,可以重复调。
|
|
61
74
|
*/
|
|
62
75
|
async kitRelease(userId, code, writes, cancel = false) {
|
|
76
|
+
return this.kitReleaseMany([userId], code, writes, cancel);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* 一张桌的几个人一起还(0.20.0)。cancel:开房次数也退回;room:全站开房数也退 1(默认跟着 cancel:整桌没建成)。
|
|
80
|
+
* 匹配桌开打时没来的人(0.20.0)是 cancel 但不退全站数:桌子开成了,只是他的那一份退给他
|
|
81
|
+
*/
|
|
82
|
+
async kitReleaseMany(userIds, code, writes, cancel = false, room = cancel) {
|
|
63
83
|
const now = Date.now();
|
|
64
84
|
const day = this.day(now);
|
|
65
|
-
const user = this.user(userId, day.day, now);
|
|
66
|
-
const i = user.live.findIndex((r) => r.code === code);
|
|
67
85
|
let w = 0;
|
|
68
|
-
|
|
86
|
+
let found = false;
|
|
87
|
+
for (const id of userIds) {
|
|
88
|
+
const user = this.user(id, day.day, now);
|
|
89
|
+
const i = user.live.findIndex((r) => r.code === code);
|
|
90
|
+
if (i < 0)
|
|
91
|
+
continue;
|
|
92
|
+
found = true;
|
|
69
93
|
user.live.splice(i, 1);
|
|
70
94
|
if (cancel && user.count > 0)
|
|
71
95
|
user.count--;
|
|
72
|
-
w
|
|
96
|
+
w += this.saveUser(id, user);
|
|
73
97
|
}
|
|
74
|
-
const rooms =
|
|
98
|
+
const rooms = room && found ? Math.max(0, day.rooms - 1) : day.rooms;
|
|
75
99
|
const total = day.writes + clean(writes) + w + 1;
|
|
76
100
|
this.saveDay(day.day, total, rooms);
|
|
77
101
|
return levelOf(total, this.limits());
|
|
78
102
|
}
|
|
103
|
+
/**
|
|
104
|
+
* 只读(0.20.0,快速匹配入队前问):这个人现在开着的房间(没有为 null)、今天的开房次数用完没有、全站的门槛。
|
|
105
|
+
* 入队前就挡掉"有房间""今天用完了""联机忙"的人,不让他们白等 15 秒
|
|
106
|
+
*/
|
|
107
|
+
async kitPeek(userId) {
|
|
108
|
+
const now = Date.now();
|
|
109
|
+
const lim = this.limits();
|
|
110
|
+
const day = this.day(now);
|
|
111
|
+
const user = this.user(userId, day.day, now);
|
|
112
|
+
const lv = levelOf(day.writes, lim);
|
|
113
|
+
// 全站开房数到了也开不了新桌,对排队的人和"联机忙"一样
|
|
114
|
+
const level = lv === 'ok' && day.rooms >= lim.dailyRooms ? 'busy' : lv;
|
|
115
|
+
return {
|
|
116
|
+
room: user.live.length >= lim.roomsPerUser ? user.live[user.live.length - 1].code : null,
|
|
117
|
+
daily: user.count >= lim.dailyRoomsPerUser,
|
|
118
|
+
level,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
79
121
|
/** 报一批写入(房间攒够一批时调),回现在的门槛。 */
|
|
80
122
|
async kitReport(writes) {
|
|
81
123
|
const day = this.day(Date.now());
|
package/dist/meter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meter.js","sourceRoot":"","sources":["../src/meter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"meter.js","sourceRoot":"","sources":["../src/meter.ts"],"names":[],"mappings":"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"}
|