@zhuweiyou/dsh-holdem 0.1.2 → 0.1.3
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/lib/client.js +331 -283
- package/lib/client.js.map +1 -1
- package/lib/index.js +32 -7
- package/lib/index.js.map +1 -1
- package/lib/types/client/ActionBar.d.ts +6 -1
- package/lib/types/client/ActionBar.d.ts.map +1 -1
- package/lib/types/client/Table.d.ts.map +1 -1
- package/lib/types/client/i18n.d.ts.map +1 -1
- package/lib/types/client/store.d.ts.map +1 -1
- package/lib/types/invariant.d.ts +2 -0
- package/lib/types/invariant.d.ts.map +1 -1
- package/lib/types/net/ws.d.ts.map +1 -1
- package/lib/types/room/RoomManager.d.ts +10 -0
- package/lib/types/room/RoomManager.d.ts.map +1 -1
- package/lib/worker.js +31 -6
- package/lib/worker.js.map +1 -1
- package/package.json +1 -1
|
@@ -4,8 +4,13 @@ export interface ActionBarProps {
|
|
|
4
4
|
potTotal: number;
|
|
5
5
|
bigBlind: number;
|
|
6
6
|
busy: boolean;
|
|
7
|
+
/**
|
|
8
|
+
* 轮不到你的时候,牌桌上仍然挂着一条「占位」的行动条(`active: false`):
|
|
9
|
+
* 只是为了让下注区高度恒定,轮到自己时牌桌不会往上跳。占位时不响应键盘。
|
|
10
|
+
*/
|
|
11
|
+
active?: boolean | undefined;
|
|
7
12
|
secondsLeft: number | null;
|
|
8
13
|
onAction: (action: TableAction) => void;
|
|
9
14
|
}
|
|
10
|
-
export declare function ActionBar({ legal, potTotal, bigBlind, busy, secondsLeft, onAction }: ActionBarProps): import("react").JSX.Element;
|
|
15
|
+
export declare function ActionBar({ legal, potTotal, bigBlind, busy, active, secondsLeft, onAction }: ActionBarProps): import("react").JSX.Element;
|
|
11
16
|
//# sourceMappingURL=ActionBar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionBar.d.ts","sourceRoot":"","sources":["../../../../src/client/ActionBar.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAK5D,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,YAAY,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,OAAO,CAAA;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAA;CACxC;AAED,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,cAAc,+
|
|
1
|
+
{"version":3,"file":"ActionBar.d.ts","sourceRoot":"","sources":["../../../../src/client/ActionBar.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAK5D,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,YAAY,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,OAAO,CAAA;IACb;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAA;CACxC;AAED,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,cAAc,+BAgHlH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../../../src/client/Table.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../../../src/client/Table.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAgB,UAAU,EAAyB,MAAM,aAAa,CAAA;AAWlF,wBAAgB,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,+BAoSnD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../../src/client/i18n.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,KAAK,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../../src/client/i18n.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,KAAK,MAAM,CAAA;AA4UzF,eAAO,MAAM,KAAK;;;CAAqB,CAAA;AAIvC,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAElD;AAED,wBAAgB,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAE/E;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAO1D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../../src/client/store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAe,MAAM,aAAa,CAAA;AAKzE,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAA;AAE/E,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,OAAO,CAAA;IACf,IAAI,EAAE,OAAO,CAAA;IACb,UAAU,EAAE,UAAU,CAAA;IACtB,IAAI,EAAE,UAAU,GAAG,IAAI,CAAA;IACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;IACnB,uCAAuC;IACvC,UAAU,EAAE,OAAO,CAAA;CACpB;AAmFD,wBAAgB,cAAc,IAAI,WAAW,CAE5C;AAED,wBAAgB,QAAQ,IAAI,WAAW,CAEtC;AAED,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,GAAG,OAAgB,GAAG,IAAI,CAOzE;AAED,qBAAqB;AACrB,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAED,wBAAgB,UAAU,IAAI,IAAI,CAGjC;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../../src/client/store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAe,MAAM,aAAa,CAAA;AAKzE,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAA;AAE/E,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,OAAO,CAAA;IACf,IAAI,EAAE,OAAO,CAAA;IACb,UAAU,EAAE,UAAU,CAAA;IACtB,IAAI,EAAE,UAAU,GAAG,IAAI,CAAA;IACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;IACnB,uCAAuC;IACvC,UAAU,EAAE,OAAO,CAAA;CACpB;AAmFD,wBAAgB,cAAc,IAAI,WAAW,CAE5C;AAED,wBAAgB,QAAQ,IAAI,WAAW,CAEtC;AAED,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,GAAG,OAAgB,GAAG,IAAI,CAOzE;AAED,qBAAqB;AACrB,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAED,wBAAgB,UAAU,IAAI,IAAI,CAGjC;AAoBD,iDAAiD;AACjD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAQ7C;AAED,wBAAgB,cAAc,IAAI,IAAI,CAOrC;AAgKD,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CA0B/C;AAED,wBAAgB,OAAO,IAAI,IAAI,CAQ9B;AAED,wBAAsB,UAAU,CAC9B,KAAK,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EAC9E,IAAI,SAAK,GACR,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED,wBAAsB,QAAQ,CAAC,KAAK,EAAE;IACpC,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,KAAK,GAAG,OAAO,CAAA;CACtB,EAAE,IAAI,SAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB3B;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAW/C;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BtE;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAIhD"}
|
package/lib/types/invariant.d.ts
CHANGED
|
@@ -20,6 +20,8 @@ export declare const WS_TICKET_TTL_MS = 60000;
|
|
|
20
20
|
export declare const SESSION_TTL_MS: number;
|
|
21
21
|
export declare const HEARTBEAT_MS = 15000;
|
|
22
22
|
export declare const DISCONNECT_AFTER_MS = 45000;
|
|
23
|
+
/** 没有实时通道时,HTTP 请求也算「人在」:这么久没动静才标成离线。 */
|
|
24
|
+
export declare const PRESENCE_TTL_MS = 20000;
|
|
23
25
|
export declare const LOBBY_KICK_IDLE_MS: number;
|
|
24
26
|
export declare const CHAT_COOLDOWN_MS = 1200;
|
|
25
27
|
export declare const ACTION_RATE_WINDOW_MS = 10000;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invariant.d.ts","sourceRoot":"","sources":["../../../src/invariant.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAE1B,eAAO,MAAM,YAAY,0BAA0B,CAAA;AACnD,eAAO,MAAM,SAAS,0BAA0B,CAAA;AAChD,eAAO,MAAM,SAAS,WAAW,CAAA;AACjC,eAAO,MAAM,WAAW,cAAc,CAAA;AACtC,eAAO,MAAM,YAAY,YAAY,CAAA;AAErC,eAAO,MAAM,SAAS,IAAI,CAAA;AAC1B,eAAO,MAAM,cAAc,KAAK,CAAA;AAChC,eAAO,MAAM,SAAS,IAAI,CAAA;AAC1B,eAAO,MAAM,SAAS,KAAK,CAAA;AAC3B,eAAO,MAAM,gBAAgB,KAAK,CAAA;AAClC,eAAO,MAAM,QAAQ,KAAK,CAAA;AAC1B,eAAO,MAAM,cAAc,KAAK,CAAA;AAChC,eAAO,MAAM,iBAAiB,KAAK,CAAA;AACnC,eAAO,MAAM,kBAAkB,KAAK,CAAA;AACpC,eAAO,MAAM,cAAc,QAAY,CAAA;AACvC,eAAO,MAAM,eAAe,QAAY,CAAA;AAExC,eAAO,MAAM,OAAO,MAAM,CAAA;AAC1B,eAAO,MAAM,gBAAgB,QAAS,CAAA;AACtC,eAAO,MAAM,cAAc,QAAsB,CAAA;AACjD,eAAO,MAAM,YAAY,QAAS,CAAA;AAClC,eAAO,MAAM,mBAAmB,QAAS,CAAA;AACzC,eAAO,MAAM,kBAAkB,QAAiB,CAAA;AAChD,eAAO,MAAM,gBAAgB,OAAO,CAAA;AACpC,eAAO,MAAM,qBAAqB,QAAS,CAAA;AAC3C,eAAO,MAAM,eAAe,KAAK,CAAA;AAEjC,eAAO,MAAM,SAAS,MAAM,CAAA;AAC5B,eAAO,MAAM,gBAAgB,OAAO,CAAA;AACpC,eAAO,MAAM,gBAAgB,OAAO,CAAA;AAEpC,eAAO,MAAM,YAAY;;;;;;;;;;;;EAIf,CAAA;AAEV,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAA;AAE9D,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,YAAY,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAIlF;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE3C"}
|
|
1
|
+
{"version":3,"file":"invariant.d.ts","sourceRoot":"","sources":["../../../src/invariant.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAE1B,eAAO,MAAM,YAAY,0BAA0B,CAAA;AACnD,eAAO,MAAM,SAAS,0BAA0B,CAAA;AAChD,eAAO,MAAM,SAAS,WAAW,CAAA;AACjC,eAAO,MAAM,WAAW,cAAc,CAAA;AACtC,eAAO,MAAM,YAAY,YAAY,CAAA;AAErC,eAAO,MAAM,SAAS,IAAI,CAAA;AAC1B,eAAO,MAAM,cAAc,KAAK,CAAA;AAChC,eAAO,MAAM,SAAS,IAAI,CAAA;AAC1B,eAAO,MAAM,SAAS,KAAK,CAAA;AAC3B,eAAO,MAAM,gBAAgB,KAAK,CAAA;AAClC,eAAO,MAAM,QAAQ,KAAK,CAAA;AAC1B,eAAO,MAAM,cAAc,KAAK,CAAA;AAChC,eAAO,MAAM,iBAAiB,KAAK,CAAA;AACnC,eAAO,MAAM,kBAAkB,KAAK,CAAA;AACpC,eAAO,MAAM,cAAc,QAAY,CAAA;AACvC,eAAO,MAAM,eAAe,QAAY,CAAA;AAExC,eAAO,MAAM,OAAO,MAAM,CAAA;AAC1B,eAAO,MAAM,gBAAgB,QAAS,CAAA;AACtC,eAAO,MAAM,cAAc,QAAsB,CAAA;AACjD,eAAO,MAAM,YAAY,QAAS,CAAA;AAClC,eAAO,MAAM,mBAAmB,QAAS,CAAA;AACzC,yCAAyC;AACzC,eAAO,MAAM,eAAe,QAAS,CAAA;AACrC,eAAO,MAAM,kBAAkB,QAAiB,CAAA;AAChD,eAAO,MAAM,gBAAgB,OAAO,CAAA;AACpC,eAAO,MAAM,qBAAqB,QAAS,CAAA;AAC3C,eAAO,MAAM,eAAe,KAAK,CAAA;AAEjC,eAAO,MAAM,SAAS,MAAM,CAAA;AAC5B,eAAO,MAAM,gBAAgB,OAAO,CAAA;AACpC,eAAO,MAAM,gBAAgB,OAAO,CAAA;AAEpC,eAAO,MAAM,YAAY;;;;;;;;;;;;EAIf,CAAA;AAEV,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAA;AAE9D,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,YAAY,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAIlF;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE3C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../../../src/net/ws.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAsBzD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../../../src/net/ws.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAsBzD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,MAAM,IAAI,CAkGxF"}
|
|
@@ -107,7 +107,17 @@ export declare class RoomManager {
|
|
|
107
107
|
playerId: PlayerId;
|
|
108
108
|
roomId: RoomId;
|
|
109
109
|
} | null;
|
|
110
|
+
/**
|
|
111
|
+
* 实时通道打开/关闭。
|
|
112
|
+
*
|
|
113
|
+
* 关掉 socket 不等于立刻离线:后台轮询(HTTP)还活着的话人还在。真正判离线交给
|
|
114
|
+
* `tick` 按 `PRESENCE_TTL_MS` 扫一遍,两边都没有动静才标成离线。
|
|
115
|
+
*/
|
|
110
116
|
markConnected(playerId: PlayerId, roomId: RoomId, connected: boolean): void;
|
|
117
|
+
/** HTTP 请求也算心跳:轮询模式下不能把自己和别人都显示成离线。 */
|
|
118
|
+
private touch;
|
|
119
|
+
/** 有实时通道,或者最近有 HTTP 动静,就算在线。 */
|
|
120
|
+
private refreshPresence;
|
|
111
121
|
health(): Record<string, unknown>;
|
|
112
122
|
private startHand;
|
|
113
123
|
private applyTableAction;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoomManager.d.ts","sourceRoot":"","sources":["../../../../src/room/RoomManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,KAAK,EAEV,aAAa,EAGb,QAAQ,EACR,UAAU,EACV,MAAM,EAEN,WAAW,EAIX,WAAW,EACX,cAAc,EAEf,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,YAAY,EAA6C,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"RoomManager.d.ts","sourceRoot":"","sources":["../../../../src/room/RoomManager.ts"],"names":[],"mappings":"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"}
|
package/lib/worker.js
CHANGED
|
@@ -11,6 +11,8 @@ const MAX_BODY_BYTES = 64 * 1024;
|
|
|
11
11
|
const MAX_FRAME_BYTES = 64 * 1024;
|
|
12
12
|
const TICK_MS = 250;
|
|
13
13
|
const SESSION_TTL_MS = 1440 * 60 * 1e3;
|
|
14
|
+
/** 没有实时通道时,HTTP 请求也算「人在」:这么久没动静才标成离线。 */
|
|
15
|
+
const PRESENCE_TTL_MS = 2e4;
|
|
14
16
|
const LOBBY_KICK_IDLE_MS = 600 * 1e3;
|
|
15
17
|
const CHAT_COOLDOWN_MS = 1200;
|
|
16
18
|
const BUY_IN_BB = 100;
|
|
@@ -1269,8 +1271,8 @@ var RoomManager = class {
|
|
|
1269
1271
|
if (cookieSession) {
|
|
1270
1272
|
const player$1 = room.players.get(cookieSession.playerId);
|
|
1271
1273
|
if (player$1 && !player$1.leaving) {
|
|
1272
|
-
player$1.connected = true;
|
|
1273
1274
|
player$1.browserId = input.browserId ?? player$1.browserId;
|
|
1275
|
+
this.touch(room, player$1);
|
|
1274
1276
|
return {
|
|
1275
1277
|
playerId: player$1.playerId,
|
|
1276
1278
|
roomId: room.roomId,
|
|
@@ -1361,7 +1363,8 @@ var RoomManager = class {
|
|
|
1361
1363
|
view(roomId, playerId) {
|
|
1362
1364
|
const room = this.roomOf(playerId);
|
|
1363
1365
|
if (!room || room.roomId !== roomId) throw new CommandError("auth", "不在这个房间里");
|
|
1364
|
-
|
|
1366
|
+
const player = room.players.get(playerId);
|
|
1367
|
+
if (player) this.touch(room, player);
|
|
1365
1368
|
return this.project(room, playerId);
|
|
1366
1369
|
}
|
|
1367
1370
|
command(roomId, playerId, command, baseSeq, actionId) {
|
|
@@ -1369,7 +1372,7 @@ var RoomManager = class {
|
|
|
1369
1372
|
if (!room || room.roomId !== roomId) throw new CommandError("auth", "不在这个房间里");
|
|
1370
1373
|
const player = room.players.get(playerId);
|
|
1371
1374
|
if (!player || player.leaving) throw new CommandError("auth", "不在这个房间里");
|
|
1372
|
-
|
|
1375
|
+
this.touch(room, player);
|
|
1373
1376
|
if (command.type === "ping") return {
|
|
1374
1377
|
seq: room.seq,
|
|
1375
1378
|
view: this.project(room, playerId)
|
|
@@ -1512,13 +1515,32 @@ var RoomManager = class {
|
|
|
1512
1515
|
roomId: entry.roomId
|
|
1513
1516
|
};
|
|
1514
1517
|
}
|
|
1518
|
+
/**
|
|
1519
|
+
* 实时通道打开/关闭。
|
|
1520
|
+
*
|
|
1521
|
+
* 关掉 socket 不等于立刻离线:后台轮询(HTTP)还活着的话人还在。真正判离线交给
|
|
1522
|
+
* `tick` 按 `PRESENCE_TTL_MS` 扫一遍,两边都没有动静才标成离线。
|
|
1523
|
+
*/
|
|
1515
1524
|
markConnected(playerId, roomId, connected) {
|
|
1516
1525
|
const room = this.rooms.get(roomId);
|
|
1517
1526
|
const player = room?.players.get(playerId);
|
|
1518
1527
|
if (!room || !player) return;
|
|
1519
|
-
|
|
1520
|
-
if (player.
|
|
1521
|
-
|
|
1528
|
+
player.socketOpen = connected;
|
|
1529
|
+
if (connected) player.lastSeenAt = this.now();
|
|
1530
|
+
this.refreshPresence(room, player);
|
|
1531
|
+
}
|
|
1532
|
+
/** HTTP 请求也算心跳:轮询模式下不能把自己和别人都显示成离线。 */
|
|
1533
|
+
touch(room, player) {
|
|
1534
|
+
if (player.leaving) return;
|
|
1535
|
+
player.lastSeenAt = this.now();
|
|
1536
|
+
if (room.hostPlayerId === player.playerId) room.hostLastSeen = player.lastSeenAt;
|
|
1537
|
+
this.refreshPresence(room, player);
|
|
1538
|
+
}
|
|
1539
|
+
/** 有实时通道,或者最近有 HTTP 动静,就算在线。 */
|
|
1540
|
+
refreshPresence(room, player) {
|
|
1541
|
+
const online = !player.leaving && (player.socketOpen || this.now() - player.lastSeenAt < PRESENCE_TTL_MS);
|
|
1542
|
+
if (player.connected === online) return;
|
|
1543
|
+
player.connected = online;
|
|
1522
1544
|
this.publish(room);
|
|
1523
1545
|
}
|
|
1524
1546
|
health() {
|
|
@@ -1677,6 +1699,7 @@ var RoomManager = class {
|
|
|
1677
1699
|
if (room.phase === "hand" && room.hand) this.tickHand(room, now);
|
|
1678
1700
|
if (room.phase === "handOver" && room.handOverAt !== null && now >= room.handOverAt) this.advance(room, now);
|
|
1679
1701
|
for (const player of [...room.players.values()]) if (player.leaving && room.phase !== "hand") this.removePlayer(room, player.playerId);
|
|
1702
|
+
else this.refreshPresence(room, player);
|
|
1680
1703
|
}
|
|
1681
1704
|
this.cleanupSessions(now);
|
|
1682
1705
|
}
|
|
@@ -1827,6 +1850,8 @@ var RoomManager = class {
|
|
|
1827
1850
|
seat,
|
|
1828
1851
|
ready: false,
|
|
1829
1852
|
connected: true,
|
|
1853
|
+
socketOpen: false,
|
|
1854
|
+
lastSeenAt: this.now(),
|
|
1830
1855
|
sittingOut: false,
|
|
1831
1856
|
autoFold: false,
|
|
1832
1857
|
timeoutStreak: 0,
|