@roomkit/core 1.0.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.
Files changed (50) hide show
  1. package/README.md +75 -0
  2. package/dist/index.d.ts +9 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +12 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/protocol/index.d.ts +5 -0
  7. package/dist/protocol/index.d.ts.map +1 -0
  8. package/dist/protocol/index.js +5 -0
  9. package/dist/protocol/index.js.map +1 -0
  10. package/dist/protocol/message-id.d.ts +53 -0
  11. package/dist/protocol/message-id.d.ts.map +1 -0
  12. package/dist/protocol/message-id.js +72 -0
  13. package/dist/protocol/message-id.js.map +1 -0
  14. package/dist/protocol/message-type.d.ts +173 -0
  15. package/dist/protocol/message-type.d.ts.map +1 -0
  16. package/dist/protocol/message-type.js +246 -0
  17. package/dist/protocol/message-type.js.map +1 -0
  18. package/dist/protocol/messages.d.ts +78 -0
  19. package/dist/protocol/messages.d.ts.map +1 -0
  20. package/dist/protocol/messages.js +2 -0
  21. package/dist/protocol/messages.js.map +1 -0
  22. package/dist/protocol/payloads.d.ts +106 -0
  23. package/dist/protocol/payloads.d.ts.map +1 -0
  24. package/dist/protocol/payloads.js +105 -0
  25. package/dist/protocol/payloads.js.map +1 -0
  26. package/dist/redis/index.d.ts +3 -0
  27. package/dist/redis/index.d.ts.map +1 -0
  28. package/dist/redis/index.js +3 -0
  29. package/dist/redis/index.js.map +1 -0
  30. package/dist/redis/keys.d.ts +36 -0
  31. package/dist/redis/keys.d.ts.map +1 -0
  32. package/dist/redis/keys.js +60 -0
  33. package/dist/redis/keys.js.map +1 -0
  34. package/dist/redis/lua-scripts.d.ts +16 -0
  35. package/dist/redis/lua-scripts.d.ts.map +1 -0
  36. package/dist/redis/lua-scripts.js +38 -0
  37. package/dist/redis/lua-scripts.js.map +1 -0
  38. package/dist/types/auth.d.ts +76 -0
  39. package/dist/types/auth.d.ts.map +1 -0
  40. package/dist/types/auth.js +15 -0
  41. package/dist/types/auth.js.map +1 -0
  42. package/dist/types/index.d.ts +118 -0
  43. package/dist/types/index.d.ts.map +1 -0
  44. package/dist/types/index.js +5 -0
  45. package/dist/types/index.js.map +1 -0
  46. package/dist/types/session.d.ts +45 -0
  47. package/dist/types/session.d.ts.map +1 -0
  48. package/dist/types/session.js +2 -0
  49. package/dist/types/session.js.map +1 -0
  50. package/package.json +62 -0
@@ -0,0 +1,246 @@
1
+ /**
2
+ * 消息类型定义
3
+ *
4
+ * 框架内置消息使用 'gw:' 前缀
5
+ * 用户自定义消息可以使用任意字符串
6
+ */
7
+ import { MessageId } from './message-id.js';
8
+ // ============ 连接层消息 ============
9
+ /** 连接成功通知(服务端→客户端) */
10
+ export const MSG_CONNECT = 'gw:connect';
11
+ /** 认证请求(客户端→服务端) */
12
+ export const MSG_AUTH = 'gw:auth';
13
+ /** 认证成功(服务端→客户端) */
14
+ export const MSG_AUTH_OK = 'gw:auth:ok';
15
+ /** 认证失败(服务端→客户端) */
16
+ export const MSG_AUTH_FAIL = 'gw:auth:fail';
17
+ /** 心跳请求 */
18
+ export const MSG_HEARTBEAT = 'gw:heartbeat';
19
+ /** 心跳响应 */
20
+ export const MSG_HEARTBEAT_ACK = 'gw:heartbeat:ack';
21
+ /** 踢出连接(服务端→客户端) */
22
+ export const MSG_KICK = 'gw:kick';
23
+ // ============ 房间层消息 ============
24
+ /** 加入房间请求(客户端→服务端) */
25
+ export const MSG_ROOM_JOIN = 'gw:room:join';
26
+ /** 加入或创建房间请求(客户端→服务端) */
27
+ export const MSG_ROOM_JOIN_OR_CREATE = 'gw:room:join-or-create';
28
+ /** 加入成功(服务端→客户端) */
29
+ export const MSG_ROOM_JOIN_OK = 'gw:room:join:ok';
30
+ /** 加入失败(服务端→客户端) */
31
+ export const MSG_ROOM_JOIN_FAIL = 'gw:room:join:fail';
32
+ /** 离开房间请求(客户端→服务端) */
33
+ export const MSG_ROOM_LEAVE = 'gw:room:leave';
34
+ /** 离开成功(服务端→客户端) */
35
+ export const MSG_ROOM_LEAVE_OK = 'gw:room:leave:ok';
36
+ /** 创建房间请求(客户端→服务端) */
37
+ export const MSG_ROOM_CREATE = 'gw:room:create';
38
+ /** 创建成功(服务端→客户端) */
39
+ export const MSG_ROOM_CREATE_OK = 'gw:room:create:ok';
40
+ /** 创建失败(服务端→客户端) */
41
+ export const MSG_ROOM_CREATE_FAIL = 'gw:room:create:fail';
42
+ /** 获取房间列表请求(客户端→服务端) */
43
+ export const MSG_ROOM_LIST = 'gw:room:list';
44
+ /** 房间列表响应(服务端→客户端) */
45
+ export const MSG_ROOM_LIST_OK = 'gw:room:list:ok';
46
+ // ============ 重连消息 ============
47
+ /** 重连请求(客户端→服务端) */
48
+ export const MSG_RECONNECT = 'gw:reconnect';
49
+ /** 重连成功(服务端→客户端) */
50
+ export const MSG_RECONNECT_OK = 'gw:reconnect:ok';
51
+ /** 重连失败(服务端→客户端) */
52
+ export const MSG_RECONNECT_FAIL = 'gw:reconnect:fail';
53
+ // ============ 状态同步消息 ============
54
+ /** 完整状态(服务端→客户端) */
55
+ export const MSG_STATE_FULL = 'gw:state:full';
56
+ /** 增量更新(服务端→客户端) */
57
+ export const MSG_STATE_DELTA = 'gw:state:delta';
58
+ /** 玩家加入通知(服务端→客户端) */
59
+ export const MSG_PLAYER_JOIN = 'gw:player:join';
60
+ /** 玩家离开通知(服务端→客户端) */
61
+ export const MSG_PLAYER_LEAVE = 'gw:player:leave';
62
+ /** 房间正在关闭通知(服务端→客户端) */
63
+ export const MSG_ROOM_CLOSING = 'gw:room:closing';
64
+ /** 系统消息/公告(服务端→客户端) */
65
+ export const MSG_SYSTEM = 'gw:system';
66
+ // ============ 错误消息 ============
67
+ /** 错误消息(服务端→客户端) */
68
+ export const MSG_ERROR = 'gw:error';
69
+ // ============ 房间迁移消息 ============
70
+ /** 房间迁移中通知(服务端→客户端) */
71
+ export const MSG_ROOM_MIGRATING = 'gw:room:migrating';
72
+ /** 房间迁移完成通知(服务端→客户端) */
73
+ export const MSG_ROOM_MIGRATION_COMPLETE = 'gw:room:migration:complete';
74
+ /**
75
+ * 所有内置消息类型的集合(用于类型检查)
76
+ *
77
+ * 提供两种访问方式:
78
+ * 1. MessageType.AUTH - 短名称
79
+ * 2. MessageType.MSG_AUTH - 完整名称(与导出常量一致)
80
+ */
81
+ export const MessageType = {
82
+ // ============ 连接层 ============
83
+ CONNECT: MSG_CONNECT,
84
+ MSG_CONNECT: MSG_CONNECT,
85
+ AUTH: MSG_AUTH,
86
+ MSG_AUTH: MSG_AUTH,
87
+ AUTH_OK: MSG_AUTH_OK,
88
+ MSG_AUTH_OK: MSG_AUTH_OK,
89
+ AUTH_FAIL: MSG_AUTH_FAIL,
90
+ MSG_AUTH_FAIL: MSG_AUTH_FAIL,
91
+ HEARTBEAT: MSG_HEARTBEAT,
92
+ MSG_HEARTBEAT: MSG_HEARTBEAT,
93
+ HEARTBEAT_ACK: MSG_HEARTBEAT_ACK,
94
+ MSG_HEARTBEAT_ACK: MSG_HEARTBEAT_ACK,
95
+ KICK: MSG_KICK,
96
+ MSG_KICK: MSG_KICK,
97
+ KICK_NOTIFY: MSG_KICK, // 别名,兼容旧代码
98
+ MSG_KICK_NOTIFY: MSG_KICK,
99
+ // ============ 房间层 ============
100
+ ROOM_JOIN: MSG_ROOM_JOIN,
101
+ MSG_ROOM_JOIN: MSG_ROOM_JOIN,
102
+ ROOM_JOIN_OK: MSG_ROOM_JOIN_OK,
103
+ MSG_ROOM_JOIN_OK: MSG_ROOM_JOIN_OK,
104
+ ROOM_JOIN_FAIL: MSG_ROOM_JOIN_FAIL,
105
+ MSG_ROOM_JOIN_FAIL: MSG_ROOM_JOIN_FAIL,
106
+ ROOM_LEAVE: MSG_ROOM_LEAVE,
107
+ MSG_ROOM_LEAVE: MSG_ROOM_LEAVE,
108
+ ROOM_LEAVE_OK: MSG_ROOM_LEAVE_OK,
109
+ MSG_ROOM_LEAVE_OK: MSG_ROOM_LEAVE_OK,
110
+ ROOM_CREATE: MSG_ROOM_CREATE,
111
+ MSG_ROOM_CREATE: MSG_ROOM_CREATE,
112
+ ROOM_CREATE_OK: MSG_ROOM_CREATE_OK,
113
+ MSG_ROOM_CREATE_OK: MSG_ROOM_CREATE_OK,
114
+ ROOM_CREATE_FAIL: MSG_ROOM_CREATE_FAIL,
115
+ MSG_ROOM_CREATE_FAIL: MSG_ROOM_CREATE_FAIL,
116
+ // ============ 加入或创建(复合操作) ============
117
+ ROOM_JOIN_OR_CREATE: MSG_ROOM_JOIN_OR_CREATE,
118
+ MSG_ROOM_JOIN_OR_CREATE: MSG_ROOM_JOIN_OR_CREATE,
119
+ ROOM_LIST: MSG_ROOM_LIST,
120
+ MSG_ROOM_LIST: MSG_ROOM_LIST,
121
+ ROOM_LIST_OK: MSG_ROOM_LIST_OK,
122
+ MSG_ROOM_LIST_OK: MSG_ROOM_LIST_OK,
123
+ ROOM_CLOSING: MSG_ROOM_CLOSING,
124
+ MSG_ROOM_CLOSING: MSG_ROOM_CLOSING,
125
+ // ============ 重连 ============
126
+ RECONNECT: MSG_RECONNECT,
127
+ MSG_RECONNECT: MSG_RECONNECT,
128
+ RECONNECT_OK: MSG_RECONNECT_OK,
129
+ MSG_RECONNECT_OK: MSG_RECONNECT_OK,
130
+ RECONNECT_FAIL: MSG_RECONNECT_FAIL,
131
+ MSG_RECONNECT_FAIL: MSG_RECONNECT_FAIL,
132
+ // ============ 状态同步 ============
133
+ STATE_FULL: MSG_STATE_FULL,
134
+ MSG_STATE_FULL: MSG_STATE_FULL,
135
+ STATE_DELTA: MSG_STATE_DELTA,
136
+ MSG_STATE_DELTA: MSG_STATE_DELTA,
137
+ PLAYER_JOIN: MSG_PLAYER_JOIN,
138
+ MSG_PLAYER_JOIN: MSG_PLAYER_JOIN,
139
+ PLAYER_JOINED: MSG_PLAYER_JOIN, // 别名,兼容旧代码
140
+ MSG_PLAYER_JOINED: MSG_PLAYER_JOIN,
141
+ PLAYER_LEAVE: MSG_PLAYER_LEAVE,
142
+ MSG_PLAYER_LEAVE: MSG_PLAYER_LEAVE,
143
+ PLAYER_LEFT: MSG_PLAYER_LEAVE, // 别名,兼容旧代码
144
+ MSG_PLAYER_LEFT: MSG_PLAYER_LEAVE,
145
+ SYSTEM: MSG_SYSTEM,
146
+ MSG_SYSTEM: MSG_SYSTEM,
147
+ // ============ 错误 ============
148
+ ERROR: MSG_ERROR,
149
+ MSG_ERROR: MSG_ERROR,
150
+ // ============ 迁移 ============
151
+ ROOM_MIGRATING: MSG_ROOM_MIGRATING,
152
+ MSG_ROOM_MIGRATING: MSG_ROOM_MIGRATING,
153
+ ROOM_MIGRATION_COMPLETE: MSG_ROOM_MIGRATION_COMPLETE,
154
+ MSG_ROOM_MIGRATION_COMPLETE: MSG_ROOM_MIGRATION_COMPLETE,
155
+ };
156
+ /**
157
+ * 判断是否为框架内置消息(字符串类型)
158
+ * 内置消息以 'gw:' 开头
159
+ */
160
+ export function isBuiltinMessageType(type) {
161
+ return type.startsWith('gw:');
162
+ }
163
+ /**
164
+ * 判断是否为房间管理消息(字符串类型)
165
+ */
166
+ export function isRoomManagementMessageType(type) {
167
+ return type.startsWith('gw:room:');
168
+ }
169
+ /**
170
+ * 判断是否为状态同步消息(字符串类型)
171
+ */
172
+ export function isStateSyncMessageType(type) {
173
+ return type.startsWith('gw:state:') || type.startsWith('gw:player:');
174
+ }
175
+ /**
176
+ * 判断是否为连接层消息(字符串类型)
177
+ */
178
+ export function isConnectionMessageType(type) {
179
+ return type === MSG_CONNECT ||
180
+ type === MSG_AUTH ||
181
+ type === MSG_AUTH_OK ||
182
+ type === MSG_AUTH_FAIL ||
183
+ type === MSG_HEARTBEAT ||
184
+ type === MSG_HEARTBEAT_ACK ||
185
+ type === MSG_KICK;
186
+ }
187
+ // ============ 旧消息ID到新类型的映射(兼容过渡期) ============
188
+ // 注意:MessageId 枚举定义在 message-id.ts 中
189
+ /**
190
+ * 旧消息ID到新消息类型的映射
191
+ * @deprecated 用于过渡期兼容
192
+ */
193
+ export const MessageIdToType = {
194
+ [MessageId.AUTH_REQ]: MSG_AUTH,
195
+ [MessageId.AUTH_RES]: MSG_AUTH_OK, // AUTH_RES 可能是 OK 或 FAIL,需要根据 payload 判断
196
+ [MessageId.HEARTBEAT]: MSG_HEARTBEAT,
197
+ [MessageId.HEARTBEAT_ACK]: MSG_HEARTBEAT_ACK,
198
+ [MessageId.KICK_NOTIFY]: MSG_KICK,
199
+ [MessageId.CREATE_ROOM_REQ]: MSG_ROOM_CREATE,
200
+ [MessageId.CREATE_ROOM_RES]: MSG_ROOM_CREATE_OK,
201
+ [MessageId.JOIN_ROOM_REQ]: MSG_ROOM_JOIN,
202
+ [MessageId.JOIN_ROOM_RES]: MSG_ROOM_JOIN_OK,
203
+ [MessageId.LEAVE_ROOM_REQ]: MSG_ROOM_LEAVE,
204
+ [MessageId.LEAVE_ROOM_RES]: MSG_ROOM_LEAVE_OK,
205
+ [MessageId.JOIN_OR_CREATE_REQ]: MSG_ROOM_JOIN,
206
+ [MessageId.JOIN_OR_CREATE_RES]: MSG_ROOM_JOIN_OK,
207
+ [MessageId.STATE_FULL]: MSG_STATE_FULL,
208
+ [MessageId.STATE_DELTA]: MSG_STATE_DELTA,
209
+ [MessageId.PLAYER_JOINED]: MSG_PLAYER_JOIN,
210
+ [MessageId.PLAYER_LEFT]: MSG_PLAYER_LEAVE,
211
+ [MessageId.ROOM_CLOSING]: MSG_ROOM_CLOSING,
212
+ [MessageId.SYSTEM_MESSAGE]: MSG_SYSTEM,
213
+ [MessageId.ROOM_MIGRATING]: MSG_ROOM_MIGRATING,
214
+ [MessageId.ROOM_MIGRATION_COMPLETE]: MSG_ROOM_MIGRATION_COMPLETE,
215
+ [MessageId.ERROR]: MSG_ERROR,
216
+ };
217
+ /**
218
+ * 新消息类型到旧消息ID的映射
219
+ * @deprecated 用于过渡期兼容
220
+ */
221
+ export const MessageTypeToId = {
222
+ [MSG_AUTH]: MessageId.AUTH_REQ,
223
+ [MSG_AUTH_OK]: MessageId.AUTH_RES,
224
+ [MSG_AUTH_FAIL]: MessageId.AUTH_RES,
225
+ [MSG_HEARTBEAT]: MessageId.HEARTBEAT,
226
+ [MSG_HEARTBEAT_ACK]: MessageId.HEARTBEAT_ACK,
227
+ [MSG_KICK]: MessageId.KICK_NOTIFY,
228
+ [MSG_ROOM_CREATE]: MessageId.CREATE_ROOM_REQ,
229
+ [MSG_ROOM_CREATE_OK]: MessageId.CREATE_ROOM_RES,
230
+ [MSG_ROOM_CREATE_FAIL]: MessageId.CREATE_ROOM_RES,
231
+ [MSG_ROOM_JOIN]: MessageId.JOIN_OR_CREATE_REQ,
232
+ [MSG_ROOM_JOIN_OK]: MessageId.JOIN_OR_CREATE_RES,
233
+ [MSG_ROOM_JOIN_FAIL]: MessageId.JOIN_OR_CREATE_RES,
234
+ [MSG_ROOM_LEAVE]: MessageId.LEAVE_ROOM_REQ,
235
+ [MSG_ROOM_LEAVE_OK]: MessageId.LEAVE_ROOM_RES,
236
+ [MSG_STATE_FULL]: MessageId.STATE_FULL,
237
+ [MSG_STATE_DELTA]: MessageId.STATE_DELTA,
238
+ [MSG_PLAYER_JOIN]: MessageId.PLAYER_JOINED,
239
+ [MSG_PLAYER_LEAVE]: MessageId.PLAYER_LEFT,
240
+ [MSG_ROOM_CLOSING]: MessageId.ROOM_CLOSING,
241
+ [MSG_SYSTEM]: MessageId.SYSTEM_MESSAGE,
242
+ [MSG_ROOM_MIGRATING]: MessageId.ROOM_MIGRATING,
243
+ [MSG_ROOM_MIGRATION_COMPLETE]: MessageId.ROOM_MIGRATION_COMPLETE,
244
+ [MSG_ERROR]: MessageId.ERROR,
245
+ };
246
+ //# sourceMappingURL=message-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-type.js","sourceRoot":"","sources":["../../src/protocol/message-type.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * 客户端消息格式(WebSocket通信)
3
+ *
4
+ * 使用 msgType 字符串类型标识消息
5
+ * 支持多房间时,游戏消息需要带 roomId 指定目标房间
6
+ */
7
+ export interface ClientMessage {
8
+ /** 消息类型(字符串) */
9
+ msgType: string;
10
+ /** 消息负载 */
11
+ payload?: unknown;
12
+ /** 目标房间ID(多房间模式必须指定) */
13
+ roomId?: string;
14
+ /** 请求ID(用于请求-响应匹配) */
15
+ reqId?: string;
16
+ /** 认证 token(加入房间时可选传入) */
17
+ token?: string;
18
+ }
19
+ /**
20
+ * Gateway -> Worker 消息类型
21
+ */
22
+ export type GatewayToWorkerMessageType = 'auth' | 'client-message' | 'client-disconnect' | 'reconnect-room' | 'kick-connection';
23
+ /**
24
+ * Gateway -> Worker 消息格式
25
+ */
26
+ export interface GatewayToWorkerMessage {
27
+ type: GatewayToWorkerMessageType;
28
+ requestId: string;
29
+ gatewayId: string;
30
+ connectionId: string;
31
+ userId?: string;
32
+ roomId?: string;
33
+ /** 消息类型(字符串) */
34
+ msgType?: string;
35
+ payload: unknown;
36
+ timestamp: number;
37
+ /** 认证 token(加入房间时传递) */
38
+ token?: string;
39
+ /** 客户端 IP(用于 AuthContext) */
40
+ clientIp?: string;
41
+ }
42
+ /**
43
+ * Worker -> Gateway 消息类型
44
+ */
45
+ export type WorkerToGatewayMessageType = 'auth-response' | 'client-response' | 'kick-connection' | 'user-joined-room' | 'user-left-room';
46
+ /**
47
+ * Worker -> Gateway 消息格式(单播响应)
48
+ */
49
+ export interface WorkerToGatewayMessage {
50
+ type: WorkerToGatewayMessageType;
51
+ requestId?: string;
52
+ workerId: string;
53
+ connectionId?: string;
54
+ userId?: string;
55
+ roomId?: string;
56
+ /** 消息类型(字符串) */
57
+ msgType?: string;
58
+ payload?: unknown;
59
+ timestamp: number;
60
+ success?: boolean;
61
+ error?: string;
62
+ userData?: Record<string, unknown>;
63
+ reason?: string;
64
+ }
65
+ /**
66
+ * Worker -> 所有Gateway 广播消息
67
+ */
68
+ export interface BroadcastMessage {
69
+ type: 'room-broadcast';
70
+ workerId: string;
71
+ roomId: string;
72
+ excludeUserId?: string;
73
+ /** 消息类型(字符串) */
74
+ msgType: string;
75
+ payload: unknown;
76
+ timestamp: number;
77
+ }
78
+ //# sourceMappingURL=messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/protocol/messages.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,gBAAgB;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW;IACX,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wBAAwB;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0BAA0B;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAClC,MAAM,GACN,gBAAgB,GAChB,mBAAmB,GACnB,gBAAgB,GAChB,iBAAiB,CAAC;AAEtB;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,0BAA0B,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAClC,eAAe,GACf,iBAAiB,GACjB,iBAAiB,GACjB,kBAAkB,GAClB,gBAAgB,CAAC;AAErB;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,0BAA0B,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAElB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEnC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,gBAAgB,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/protocol/messages.ts"],"names":[],"mappings":""}
@@ -0,0 +1,106 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * 鉴权请求
4
+ */
5
+ export declare const AuthRequestSchema: z.ZodObject<{
6
+ token: z.ZodString;
7
+ deviceId: z.ZodOptional<z.ZodString>;
8
+ platform: z.ZodOptional<z.ZodString>;
9
+ clientInfo: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
10
+ }, z.core.$strip>;
11
+ export type AuthRequest = z.infer<typeof AuthRequestSchema>;
12
+ /**
13
+ * 鉴权响应
14
+ */
15
+ export declare const AuthResponseSchema: z.ZodObject<{
16
+ success: z.ZodBoolean;
17
+ userId: z.ZodOptional<z.ZodString>;
18
+ error: z.ZodOptional<z.ZodString>;
19
+ serverTime: z.ZodNumber;
20
+ }, z.core.$strip>;
21
+ export type AuthResponse = z.infer<typeof AuthResponseSchema>;
22
+ /**
23
+ * 创建房间请求
24
+ */
25
+ export declare const CreateRoomRequestSchema: z.ZodObject<{
26
+ roomId: z.ZodOptional<z.ZodString>;
27
+ gameType: z.ZodString;
28
+ maxPlayers: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
29
+ config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
30
+ }, z.core.$strip>;
31
+ export type CreateRoomRequest = z.infer<typeof CreateRoomRequestSchema>;
32
+ /**
33
+ * 创建房间响应
34
+ */
35
+ export declare const CreateRoomResponseSchema: z.ZodObject<{
36
+ success: z.ZodBoolean;
37
+ roomId: z.ZodOptional<z.ZodString>;
38
+ error: z.ZodOptional<z.ZodString>;
39
+ }, z.core.$strip>;
40
+ export type CreateRoomResponse = z.infer<typeof CreateRoomResponseSchema>;
41
+ /**
42
+ * 加入房间请求
43
+ */
44
+ export declare const JoinRoomRequestSchema: z.ZodObject<{
45
+ roomId: z.ZodString;
46
+ password: z.ZodOptional<z.ZodString>;
47
+ }, z.core.$loose>;
48
+ export type JoinRoomRequest = z.infer<typeof JoinRoomRequestSchema>;
49
+ /**
50
+ * 加入房间响应
51
+ */
52
+ export declare const JoinRoomResponseSchema: z.ZodObject<{
53
+ success: z.ZodBoolean;
54
+ roomInfo: z.ZodOptional<z.ZodObject<{
55
+ roomId: z.ZodString;
56
+ gameType: z.ZodString;
57
+ playerCount: z.ZodNumber;
58
+ maxPlayers: z.ZodNumber;
59
+ }, z.core.$strip>>;
60
+ players: z.ZodOptional<z.ZodArray<z.ZodObject<{
61
+ userId: z.ZodString;
62
+ nickname: z.ZodOptional<z.ZodString>;
63
+ }, z.core.$strip>>>;
64
+ error: z.ZodOptional<z.ZodString>;
65
+ }, z.core.$strip>;
66
+ export type JoinRoomResponse = z.infer<typeof JoinRoomResponseSchema>;
67
+ /**
68
+ * 离开房间请求
69
+ */
70
+ export declare const LeaveRoomRequestSchema: z.ZodObject<{
71
+ roomId: z.ZodString;
72
+ }, z.core.$strip>;
73
+ export type LeaveRoomRequest = z.infer<typeof LeaveRoomRequestSchema>;
74
+ /**
75
+ * 加入或创建房间请求
76
+ * 用于"快速匹配"场景:多个用户同时请求时,第一个创建房间,其他人等待并加入
77
+ */
78
+ export declare const JoinOrCreateRequestSchema: z.ZodObject<{
79
+ roomId: z.ZodString;
80
+ gameType: z.ZodString;
81
+ maxPlayers: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
82
+ config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
83
+ password: z.ZodOptional<z.ZodString>;
84
+ waitTimeout: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
85
+ }, z.core.$strip>;
86
+ export type JoinOrCreateRequest = z.infer<typeof JoinOrCreateRequestSchema>;
87
+ /**
88
+ * 加入或创建房间响应
89
+ */
90
+ export declare const JoinOrCreateResponseSchema: z.ZodObject<{
91
+ success: z.ZodBoolean;
92
+ created: z.ZodOptional<z.ZodBoolean>;
93
+ roomInfo: z.ZodOptional<z.ZodObject<{
94
+ roomId: z.ZodString;
95
+ gameType: z.ZodString;
96
+ playerCount: z.ZodNumber;
97
+ maxPlayers: z.ZodNumber;
98
+ }, z.core.$strip>>;
99
+ players: z.ZodOptional<z.ZodArray<z.ZodObject<{
100
+ userId: z.ZodString;
101
+ nickname: z.ZodOptional<z.ZodString>;
102
+ }, z.core.$strip>>>;
103
+ error: z.ZodOptional<z.ZodString>;
104
+ }, z.core.$strip>;
105
+ export type JoinOrCreateResponse = z.infer<typeof JoinOrCreateResponseSchema>;
106
+ //# sourceMappingURL=payloads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payloads.d.ts","sourceRoot":"","sources":["../../src/protocol/payloads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;iBAK5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;iBAK7B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;iBAKlC,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;;iBAInC,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;iBAGlB,CAAC;AACjB,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;iBAmBjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE;;GAEG;AACH,eAAO,MAAM,sBAAsB;;iBAEjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE;;;GAGG;AACH,eAAO,MAAM,yBAAyB;;;;;;;iBAOpC,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E;;GAEG;AACH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;iBAoBrC,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC"}
@@ -0,0 +1,105 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * 鉴权请求
4
+ */
5
+ export const AuthRequestSchema = z.object({
6
+ token: z.string(),
7
+ deviceId: z.string().optional(),
8
+ platform: z.string().optional(),
9
+ clientInfo: z.record(z.string(), z.unknown()).optional(),
10
+ });
11
+ /**
12
+ * 鉴权响应
13
+ */
14
+ export const AuthResponseSchema = z.object({
15
+ success: z.boolean(),
16
+ userId: z.string().optional(),
17
+ error: z.string().optional(),
18
+ serverTime: z.number(),
19
+ });
20
+ /**
21
+ * 创建房间请求
22
+ */
23
+ export const CreateRoomRequestSchema = z.object({
24
+ roomId: z.string().optional(), // 可选:客户端指定房间号
25
+ gameType: z.string(),
26
+ maxPlayers: z.number().optional().default(4),
27
+ config: z.record(z.string(), z.unknown()).optional(),
28
+ });
29
+ /**
30
+ * 创建房间响应
31
+ */
32
+ export const CreateRoomResponseSchema = z.object({
33
+ success: z.boolean(),
34
+ roomId: z.string().optional(),
35
+ error: z.string().optional(),
36
+ });
37
+ /**
38
+ * 加入房间请求
39
+ */
40
+ export const JoinRoomRequestSchema = z.object({
41
+ roomId: z.string(),
42
+ password: z.string().optional(),
43
+ }).passthrough(); // 允许额外字段传递给 Worker
44
+ /**
45
+ * 加入房间响应
46
+ */
47
+ export const JoinRoomResponseSchema = z.object({
48
+ success: z.boolean(),
49
+ roomInfo: z
50
+ .object({
51
+ roomId: z.string(),
52
+ gameType: z.string(),
53
+ playerCount: z.number(),
54
+ maxPlayers: z.number(),
55
+ })
56
+ .optional(),
57
+ players: z
58
+ .array(z.object({
59
+ userId: z.string(),
60
+ nickname: z.string().optional(),
61
+ }))
62
+ .optional(),
63
+ error: z.string().optional(),
64
+ });
65
+ /**
66
+ * 离开房间请求
67
+ */
68
+ export const LeaveRoomRequestSchema = z.object({
69
+ roomId: z.string(),
70
+ });
71
+ /**
72
+ * 加入或创建房间请求
73
+ * 用于"快速匹配"场景:多个用户同时请求时,第一个创建房间,其他人等待并加入
74
+ */
75
+ export const JoinOrCreateRequestSchema = z.object({
76
+ roomId: z.string(), // 房间号(必须指定,用于识别同一房间)
77
+ gameType: z.string(),
78
+ maxPlayers: z.number().optional().default(4),
79
+ config: z.record(z.string(), z.unknown()).optional(),
80
+ password: z.string().optional(),
81
+ waitTimeout: z.number().optional().default(5000), // 等待超时时间(毫秒)
82
+ });
83
+ /**
84
+ * 加入或创建房间响应
85
+ */
86
+ export const JoinOrCreateResponseSchema = z.object({
87
+ success: z.boolean(),
88
+ created: z.boolean().optional(), // true = 新创建, false = 加入已有
89
+ roomInfo: z
90
+ .object({
91
+ roomId: z.string(),
92
+ gameType: z.string(),
93
+ playerCount: z.number(),
94
+ maxPlayers: z.number(),
95
+ })
96
+ .optional(),
97
+ players: z
98
+ .array(z.object({
99
+ userId: z.string(),
100
+ nickname: z.string().optional(),
101
+ }))
102
+ .optional(),
103
+ error: z.string().optional(),
104
+ });
105
+ //# sourceMappingURL=payloads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payloads.js","sourceRoot":"","sources":["../../src/protocol/payloads.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from './keys.js';
2
+ export * from './lua-scripts.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/redis/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './keys.js';
2
+ export * from './lua-scripts.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/redis/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Redis Key 模式定义
3
+ * 所有Key使用 gw: 前缀
4
+ */
5
+ export declare const RedisKeys: {
6
+ readonly userSession: (userId: string) => string;
7
+ readonly sessionToken: (token: string) => string;
8
+ readonly session: (userId: string) => string;
9
+ readonly userRoom: (userId: string) => string;
10
+ readonly worker: (workerId: string) => string;
11
+ readonly workersAll: () => string;
12
+ readonly workersByType: (gameType: string) => string;
13
+ readonly gateway: (gatewayId: string) => string;
14
+ readonly gatewaysAll: () => string;
15
+ readonly roomWorker: (roomId: string) => string;
16
+ readonly roomMembers: (roomId: string) => string;
17
+ readonly roomState: (roomId: string) => string;
18
+ readonly roomsAll: () => string;
19
+ readonly roomsByType: (gameType: string) => string;
20
+ readonly roomCreatingLock: (roomId: string) => string;
21
+ };
22
+ /**
23
+ * Redis Channel 模式定义
24
+ */
25
+ export declare const RedisChannels: {
26
+ readonly rpcWorker: (workerId: string) => string;
27
+ readonly rpcGateway: (gatewayId: string) => string;
28
+ readonly broadcast: () => string;
29
+ readonly adminWorker: (workerId: string) => string;
30
+ readonly roomCreated: (roomId: string) => string;
31
+ readonly migrationRequest: (targetWorkerId: string) => string;
32
+ readonly migrationConfirm: (roomId: string) => string;
33
+ readonly takeoverRequest: () => string;
34
+ readonly routeUpdate: () => string;
35
+ };
36
+ //# sourceMappingURL=keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/redis/keys.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,SAAS;mCAEE,MAAM;mCAGN,MAAM;+BAGV,MAAM;gCAGL,MAAM;gCAGN,MAAM;;uCAMC,MAAM;kCAGX,MAAM;;kCAMN,MAAM;mCAGL,MAAM;iCAGR,MAAM;;qCAMF,MAAM;wCAGH,MAAM;CACzB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,aAAa;mCAEF,MAAM;qCAGJ,MAAM;;qCAMN,MAAM;mCAGR,MAAM;gDAGO,MAAM;wCAGd,MAAM;;;CAOzB,CAAC"}