@roomkit/client 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.
- package/README.md +300 -0
- package/dist/Client.d.ts +154 -0
- package/dist/Client.d.ts.map +1 -0
- package/dist/Client.js +602 -0
- package/dist/Client.js.map +1 -0
- package/dist/Room.d.ts +161 -0
- package/dist/Room.d.ts.map +1 -0
- package/dist/Room.js +386 -0
- package/dist/Room.js.map +1 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +46 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +113 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +60 -0
package/dist/Room.d.ts
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Room - 房间抽象类
|
|
3
|
+
* 类似 Colyseus 的 Room API
|
|
4
|
+
*/
|
|
5
|
+
import type { Client } from './Client.js';
|
|
6
|
+
export interface RoomOptions {
|
|
7
|
+
[key: string]: unknown;
|
|
8
|
+
}
|
|
9
|
+
export type RoomEventMap<State = any> = {
|
|
10
|
+
'stateChange': (state: State) => void;
|
|
11
|
+
'join': () => void;
|
|
12
|
+
'leave': (code: number) => void;
|
|
13
|
+
'error': (code: number, message: string) => void;
|
|
14
|
+
'message': (type: number, message: any) => void;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Room 类 - 代表一个游戏房间
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* const room = await client.joinOrCreate<MyGameState>('game_type', {
|
|
22
|
+
* maxPlayers: 4
|
|
23
|
+
* });
|
|
24
|
+
*
|
|
25
|
+
* // 监听状态变化
|
|
26
|
+
* room.onStateChange((state) => {
|
|
27
|
+
* console.log('State updated:', state);
|
|
28
|
+
* });
|
|
29
|
+
*
|
|
30
|
+
* // 监听自定义消息
|
|
31
|
+
* room.onMessage('player_action', (message) => {
|
|
32
|
+
* console.log('Player action:', message);
|
|
33
|
+
* });
|
|
34
|
+
*
|
|
35
|
+
* // 发送消息
|
|
36
|
+
* room.send('my_action', { type: 'move', x: 10, y: 20 });
|
|
37
|
+
*
|
|
38
|
+
* // 离开房间
|
|
39
|
+
* await room.leave();
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export declare class Room<State = any> {
|
|
43
|
+
id: string;
|
|
44
|
+
sessionId: string;
|
|
45
|
+
name: string;
|
|
46
|
+
private _state;
|
|
47
|
+
private client;
|
|
48
|
+
private eventHandlers;
|
|
49
|
+
private messageHandlers;
|
|
50
|
+
private hasJoined;
|
|
51
|
+
constructor(client: Client, roomId: string, roomName: string, sessionId: string);
|
|
52
|
+
/**
|
|
53
|
+
* 当前房间状态
|
|
54
|
+
*/
|
|
55
|
+
get state(): State | null;
|
|
56
|
+
/**
|
|
57
|
+
* 更新房间状态(内部使用)
|
|
58
|
+
*/
|
|
59
|
+
setState(state: State): void;
|
|
60
|
+
/**
|
|
61
|
+
* 监听状态变化
|
|
62
|
+
*/
|
|
63
|
+
onStateChange(callback: (state: State, previousState?: State | null) => void): () => void;
|
|
64
|
+
/**
|
|
65
|
+
* 监听房间加入事件
|
|
66
|
+
*/
|
|
67
|
+
onJoin(callback: () => void): () => void;
|
|
68
|
+
/**
|
|
69
|
+
* 监听房间离开事件
|
|
70
|
+
*/
|
|
71
|
+
onLeave(callback: (code: number) => void): () => void;
|
|
72
|
+
/**
|
|
73
|
+
* 监听错误事件
|
|
74
|
+
*/
|
|
75
|
+
onError(callback: (code: number, message: string) => void): () => void;
|
|
76
|
+
/**
|
|
77
|
+
* 监听二进制状态数据
|
|
78
|
+
* 当服务端使用 @roomkit/state 的二进制编码时触发
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```typescript
|
|
82
|
+
* room.onBinaryState((data) => {
|
|
83
|
+
* // 使用你的 State 类解码
|
|
84
|
+
* const state = MyGameState.decode(data.data);
|
|
85
|
+
* room.setState(state);
|
|
86
|
+
* });
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
onBinaryState(callback: (data: {
|
|
90
|
+
data: Uint8Array;
|
|
91
|
+
compressed: boolean;
|
|
92
|
+
originalSize: number;
|
|
93
|
+
}) => void): () => void;
|
|
94
|
+
/**
|
|
95
|
+
* 监听自定义消息
|
|
96
|
+
* @param type 消息类型(字符串或数字)
|
|
97
|
+
*/
|
|
98
|
+
onMessage<T = any>(type: number | string, callback: (message: T) => void): () => void;
|
|
99
|
+
/**
|
|
100
|
+
* 移除消息监听器
|
|
101
|
+
*/
|
|
102
|
+
removeMessageListener(type: number | string, callback?: Function): void;
|
|
103
|
+
/**
|
|
104
|
+
* 发送消息到房间
|
|
105
|
+
* @param type 消息类型(字符串或数字)
|
|
106
|
+
* @param message 消息内容
|
|
107
|
+
*/
|
|
108
|
+
send(type: number | string, message?: any): void;
|
|
109
|
+
/**
|
|
110
|
+
* 发送请求并等待响应
|
|
111
|
+
* @param type 消息类型(字符串或数字)
|
|
112
|
+
* @param message 消息内容
|
|
113
|
+
*/
|
|
114
|
+
request<T = any>(type: number | string, message?: any): Promise<T>;
|
|
115
|
+
/**
|
|
116
|
+
* 离开房间
|
|
117
|
+
*/
|
|
118
|
+
leave(consented?: boolean): Promise<void>;
|
|
119
|
+
/**
|
|
120
|
+
* 移除所有监听器
|
|
121
|
+
*/
|
|
122
|
+
removeAllListeners(): void;
|
|
123
|
+
/**
|
|
124
|
+
* 清理资源(内部使用)
|
|
125
|
+
*/
|
|
126
|
+
dispose(): void;
|
|
127
|
+
/**
|
|
128
|
+
* 处理接收到的消息(内部使用)
|
|
129
|
+
* 支持 msgType(字符串)和 msgId(数字)双格式
|
|
130
|
+
*/
|
|
131
|
+
handleMessage(msgType: string | undefined, msgId: number | undefined, payload: any): void;
|
|
132
|
+
/**
|
|
133
|
+
* 通用事件监听
|
|
134
|
+
*/
|
|
135
|
+
private on;
|
|
136
|
+
/**
|
|
137
|
+
* 触发事件
|
|
138
|
+
*/
|
|
139
|
+
private triggerEvent;
|
|
140
|
+
/**
|
|
141
|
+
* 触发消息事件
|
|
142
|
+
*/
|
|
143
|
+
/**
|
|
144
|
+
* 触发消息事件
|
|
145
|
+
* @param type 消息类型(字符串或数字)
|
|
146
|
+
*/
|
|
147
|
+
private triggerMessage;
|
|
148
|
+
/**
|
|
149
|
+
* 应用状态增量更新
|
|
150
|
+
*/
|
|
151
|
+
private applyStateDelta;
|
|
152
|
+
/**
|
|
153
|
+
* 应用 JSON Patch 操作
|
|
154
|
+
*/
|
|
155
|
+
private applyPatches;
|
|
156
|
+
/**
|
|
157
|
+
* 深度合并对象
|
|
158
|
+
*/
|
|
159
|
+
private deepMerge;
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=Room.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Room.d.ts","sourceRoot":"","sources":["../src/Room.ts"],"names":[],"mappings":"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"}
|
package/dist/Room.js
ADDED
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Room - 房间抽象类
|
|
3
|
+
* 类似 Colyseus 的 Room API
|
|
4
|
+
*/
|
|
5
|
+
import { MessageId, MessageType } from '@roomkit/core';
|
|
6
|
+
/**
|
|
7
|
+
* Room 类 - 代表一个游戏房间
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* const room = await client.joinOrCreate<MyGameState>('game_type', {
|
|
12
|
+
* maxPlayers: 4
|
|
13
|
+
* });
|
|
14
|
+
*
|
|
15
|
+
* // 监听状态变化
|
|
16
|
+
* room.onStateChange((state) => {
|
|
17
|
+
* console.log('State updated:', state);
|
|
18
|
+
* });
|
|
19
|
+
*
|
|
20
|
+
* // 监听自定义消息
|
|
21
|
+
* room.onMessage('player_action', (message) => {
|
|
22
|
+
* console.log('Player action:', message);
|
|
23
|
+
* });
|
|
24
|
+
*
|
|
25
|
+
* // 发送消息
|
|
26
|
+
* room.send('my_action', { type: 'move', x: 10, y: 20 });
|
|
27
|
+
*
|
|
28
|
+
* // 离开房间
|
|
29
|
+
* await room.leave();
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export class Room {
|
|
33
|
+
constructor(client, roomId, roomName, sessionId) {
|
|
34
|
+
this._state = null;
|
|
35
|
+
this.eventHandlers = new Map();
|
|
36
|
+
this.messageHandlers = new Map();
|
|
37
|
+
this.hasJoined = false;
|
|
38
|
+
this.client = client;
|
|
39
|
+
this.id = roomId;
|
|
40
|
+
this.name = roomName;
|
|
41
|
+
this.sessionId = sessionId;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 当前房间状态
|
|
45
|
+
*/
|
|
46
|
+
get state() {
|
|
47
|
+
return this._state;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* 更新房间状态(内部使用)
|
|
51
|
+
*/
|
|
52
|
+
setState(state) {
|
|
53
|
+
const previousState = this._state;
|
|
54
|
+
this._state = state;
|
|
55
|
+
// 触发状态变化事件
|
|
56
|
+
this.triggerEvent('stateChange', state, previousState);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* 监听状态变化
|
|
60
|
+
*/
|
|
61
|
+
onStateChange(callback) {
|
|
62
|
+
return this.on('stateChange', callback);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* 监听房间加入事件
|
|
66
|
+
*/
|
|
67
|
+
onJoin(callback) {
|
|
68
|
+
return this.on('join', callback);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* 监听房间离开事件
|
|
72
|
+
*/
|
|
73
|
+
onLeave(callback) {
|
|
74
|
+
return this.on('leave', callback);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* 监听错误事件
|
|
78
|
+
*/
|
|
79
|
+
onError(callback) {
|
|
80
|
+
return this.on('error', callback);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* 监听二进制状态数据
|
|
84
|
+
* 当服务端使用 @roomkit/state 的二进制编码时触发
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```typescript
|
|
88
|
+
* room.onBinaryState((data) => {
|
|
89
|
+
* // 使用你的 State 类解码
|
|
90
|
+
* const state = MyGameState.decode(data.data);
|
|
91
|
+
* room.setState(state);
|
|
92
|
+
* });
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
onBinaryState(callback) {
|
|
96
|
+
return this.on('binaryState', callback);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* 监听自定义消息
|
|
100
|
+
* @param type 消息类型(字符串或数字)
|
|
101
|
+
*/
|
|
102
|
+
onMessage(type, callback) {
|
|
103
|
+
let handlers = this.messageHandlers.get(type);
|
|
104
|
+
if (!handlers) {
|
|
105
|
+
handlers = new Set();
|
|
106
|
+
this.messageHandlers.set(type, handlers);
|
|
107
|
+
}
|
|
108
|
+
handlers.add(callback);
|
|
109
|
+
return () => {
|
|
110
|
+
handlers?.delete(callback);
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* 移除消息监听器
|
|
115
|
+
*/
|
|
116
|
+
removeMessageListener(type, callback) {
|
|
117
|
+
if (callback) {
|
|
118
|
+
this.messageHandlers.get(type)?.delete(callback);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
this.messageHandlers.delete(type);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* 发送消息到房间
|
|
126
|
+
* @param type 消息类型(字符串或数字)
|
|
127
|
+
* @param message 消息内容
|
|
128
|
+
*/
|
|
129
|
+
send(type, message = {}) {
|
|
130
|
+
// 直接发送,Client.send 现在支持字符串和数字类型
|
|
131
|
+
this.client.send(type, message, this.id);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* 发送请求并等待响应
|
|
135
|
+
* @param type 消息类型(字符串或数字)
|
|
136
|
+
* @param message 消息内容
|
|
137
|
+
*/
|
|
138
|
+
async request(type, message = {}) {
|
|
139
|
+
// 直接发送,Client.request 现在支持字符串和数字类型
|
|
140
|
+
return this.client.request(type, message, this.id);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* 离开房间
|
|
144
|
+
*/
|
|
145
|
+
async leave(consented = true) {
|
|
146
|
+
if (!this.hasJoined)
|
|
147
|
+
return;
|
|
148
|
+
try {
|
|
149
|
+
await this.client.request(MessageType.MSG_ROOM_LEAVE, {
|
|
150
|
+
roomId: this.id
|
|
151
|
+
});
|
|
152
|
+
this.hasJoined = false;
|
|
153
|
+
this.triggerEvent('leave', consented ? 1000 : 4000);
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
this.triggerEvent('error', 4000, error.message);
|
|
157
|
+
throw error;
|
|
158
|
+
}
|
|
159
|
+
finally {
|
|
160
|
+
this.dispose();
|
|
161
|
+
// 从Client的房间列表中移除
|
|
162
|
+
this.client.removeRoom(this.id);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* 移除所有监听器
|
|
167
|
+
*/
|
|
168
|
+
removeAllListeners() {
|
|
169
|
+
this.eventHandlers.clear();
|
|
170
|
+
this.messageHandlers.clear();
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* 清理资源(内部使用)
|
|
174
|
+
*/
|
|
175
|
+
dispose() {
|
|
176
|
+
this.removeAllListeners();
|
|
177
|
+
this._state = null;
|
|
178
|
+
this.hasJoined = false;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* 处理接收到的消息(内部使用)
|
|
182
|
+
* 支持 msgType(字符串)和 msgId(数字)双格式
|
|
183
|
+
*/
|
|
184
|
+
handleMessage(msgType, msgId, payload) {
|
|
185
|
+
// 使用 msgType 优先,然后回退到 msgId
|
|
186
|
+
const isStateFull = msgType === MessageType.MSG_STATE_FULL || msgId === MessageId.STATE_FULL;
|
|
187
|
+
const isStateDelta = msgType === MessageType.MSG_STATE_DELTA || msgId === MessageId.STATE_DELTA;
|
|
188
|
+
const isPlayerJoined = msgType === MessageType.MSG_PLAYER_JOINED || msgId === MessageId.PLAYER_JOINED;
|
|
189
|
+
const isPlayerLeft = msgType === MessageType.MSG_PLAYER_LEFT || msgId === MessageId.PLAYER_LEFT;
|
|
190
|
+
const isRoomClosing = msgType === MessageType.MSG_ROOM_CLOSING || msgId === MessageId.ROOM_CLOSING;
|
|
191
|
+
const isError = msgType === MessageType.MSG_ERROR || msgId === MessageId.ERROR;
|
|
192
|
+
// 特殊消息处理
|
|
193
|
+
if (isStateFull) {
|
|
194
|
+
// 支持二进制编码和 JSON 两种格式
|
|
195
|
+
if (payload.binary && payload.data) {
|
|
196
|
+
// 二进制编码格式(来自 @roomkit/state encode)
|
|
197
|
+
this.triggerEvent('binaryState', {
|
|
198
|
+
data: new Uint8Array(payload.data),
|
|
199
|
+
compressed: payload.compressed,
|
|
200
|
+
originalSize: payload.originalSize,
|
|
201
|
+
});
|
|
202
|
+
// 同时设置一个占位状态,实际解码由业务层处理
|
|
203
|
+
if (!this.hasJoined) {
|
|
204
|
+
this.hasJoined = true;
|
|
205
|
+
this.triggerEvent('join');
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
// JSON 格式(向后兼容)
|
|
210
|
+
this.setState(payload.state || payload);
|
|
211
|
+
if (!this.hasJoined) {
|
|
212
|
+
this.hasJoined = true;
|
|
213
|
+
this.triggerEvent('join');
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
if (isStateDelta) {
|
|
219
|
+
// 增量更新(可选实现)
|
|
220
|
+
this.applyStateDelta(payload.delta || payload);
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
if (isPlayerJoined || isPlayerLeft) {
|
|
224
|
+
// 触发通用消息事件
|
|
225
|
+
this.triggerMessage(msgType || msgId, payload);
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
if (isRoomClosing) {
|
|
229
|
+
// 房间关闭
|
|
230
|
+
this.hasJoined = false;
|
|
231
|
+
this.triggerEvent('leave', 4000);
|
|
232
|
+
this.triggerMessage(msgType || msgId, payload);
|
|
233
|
+
this.dispose();
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
if (isError) {
|
|
237
|
+
// 错误消息
|
|
238
|
+
this.triggerEvent('error', payload.code || 5000, payload.message || 'Unknown error');
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
// 自定义游戏消息
|
|
242
|
+
this.triggerMessage(msgType || msgId, payload);
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* 通用事件监听
|
|
246
|
+
*/
|
|
247
|
+
on(event, callback) {
|
|
248
|
+
let handlers = this.eventHandlers.get(event);
|
|
249
|
+
if (!handlers) {
|
|
250
|
+
handlers = new Set();
|
|
251
|
+
this.eventHandlers.set(event, handlers);
|
|
252
|
+
}
|
|
253
|
+
handlers.add(callback);
|
|
254
|
+
return () => {
|
|
255
|
+
handlers?.delete(callback);
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* 触发事件
|
|
260
|
+
*/
|
|
261
|
+
triggerEvent(event, ...args) {
|
|
262
|
+
const handlers = this.eventHandlers.get(event);
|
|
263
|
+
if (handlers) {
|
|
264
|
+
handlers.forEach(handler => {
|
|
265
|
+
try {
|
|
266
|
+
handler(...args);
|
|
267
|
+
}
|
|
268
|
+
catch (e) {
|
|
269
|
+
console.error(`[Room] Error in ${event} handler:`, e);
|
|
270
|
+
}
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* 触发消息事件
|
|
276
|
+
*/
|
|
277
|
+
/**
|
|
278
|
+
* 触发消息事件
|
|
279
|
+
* @param type 消息类型(字符串或数字)
|
|
280
|
+
*/
|
|
281
|
+
triggerMessage(type, payload) {
|
|
282
|
+
// 按类型查找处理器
|
|
283
|
+
const handlers = this.messageHandlers.get(type);
|
|
284
|
+
if (handlers) {
|
|
285
|
+
handlers.forEach(handler => {
|
|
286
|
+
try {
|
|
287
|
+
handler(payload);
|
|
288
|
+
}
|
|
289
|
+
catch (e) {
|
|
290
|
+
console.error(`[Room] Error in message handler:`, e);
|
|
291
|
+
}
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
// 通用消息事件
|
|
295
|
+
this.triggerEvent('message', type, payload);
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* 应用状态增量更新
|
|
299
|
+
*/
|
|
300
|
+
applyStateDelta(delta) {
|
|
301
|
+
if (!this._state)
|
|
302
|
+
return;
|
|
303
|
+
// 如果delta包含 patches 数组(JSON Patch 格式)
|
|
304
|
+
if (delta.patches && Array.isArray(delta.patches)) {
|
|
305
|
+
this.applyPatches(delta.patches);
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
308
|
+
// 否则使用简单的深度合并策略
|
|
309
|
+
this._state = this.deepMerge(this._state, delta);
|
|
310
|
+
this.triggerEvent('stateChange', this._state);
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* 应用 JSON Patch 操作
|
|
314
|
+
*/
|
|
315
|
+
applyPatches(patches) {
|
|
316
|
+
if (!this._state)
|
|
317
|
+
return;
|
|
318
|
+
for (const patch of patches) {
|
|
319
|
+
const parts = patch.path.split('/').filter(p => p);
|
|
320
|
+
if (parts.length === 0)
|
|
321
|
+
continue;
|
|
322
|
+
// 导航到父对象
|
|
323
|
+
let current = this._state;
|
|
324
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
325
|
+
const part = parts[i];
|
|
326
|
+
if (!(part in current)) {
|
|
327
|
+
current[part] = {};
|
|
328
|
+
}
|
|
329
|
+
current = current[part];
|
|
330
|
+
}
|
|
331
|
+
const lastPart = parts[parts.length - 1];
|
|
332
|
+
// 应用操作
|
|
333
|
+
switch (patch.op) {
|
|
334
|
+
case 'add':
|
|
335
|
+
case 'replace':
|
|
336
|
+
if (current instanceof Map) {
|
|
337
|
+
current.set(lastPart, patch.value);
|
|
338
|
+
}
|
|
339
|
+
else if (Array.isArray(current)) {
|
|
340
|
+
const index = parseInt(lastPart);
|
|
341
|
+
if (!isNaN(index)) {
|
|
342
|
+
current[index] = patch.value;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
else {
|
|
346
|
+
current[lastPart] = patch.value;
|
|
347
|
+
}
|
|
348
|
+
break;
|
|
349
|
+
case 'remove':
|
|
350
|
+
if (current instanceof Map) {
|
|
351
|
+
current.delete(lastPart);
|
|
352
|
+
}
|
|
353
|
+
else if (Array.isArray(current)) {
|
|
354
|
+
const index = parseInt(lastPart);
|
|
355
|
+
if (!isNaN(index)) {
|
|
356
|
+
current.splice(index, 1);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
else {
|
|
360
|
+
delete current[lastPart];
|
|
361
|
+
}
|
|
362
|
+
break;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
this.triggerEvent('stateChange', this._state);
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* 深度合并对象
|
|
369
|
+
*/
|
|
370
|
+
deepMerge(target, source) {
|
|
371
|
+
if (typeof source !== 'object' || source === null) {
|
|
372
|
+
return source;
|
|
373
|
+
}
|
|
374
|
+
const result = Array.isArray(target) ? [...target] : { ...target };
|
|
375
|
+
for (const key in source) {
|
|
376
|
+
if (typeof source[key] === 'object' && source[key] !== null) {
|
|
377
|
+
result[key] = this.deepMerge(result[key] || {}, source[key]);
|
|
378
|
+
}
|
|
379
|
+
else {
|
|
380
|
+
result[key] = source[key];
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
return result;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
//# sourceMappingURL=Room.js.map
|
package/dist/Room.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Room.js","sourceRoot":"","sources":["../src/Room.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @roomkit/client - Client SDK for Gateway-Worker Framework
|
|
3
|
+
*
|
|
4
|
+
* A TypeScript client SDK inspired by Colyseus, providing an elegant API
|
|
5
|
+
* for connecting to Gateway-Worker game servers.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { Client } from '@roomkit/client';
|
|
10
|
+
*
|
|
11
|
+
* // Create client
|
|
12
|
+
* const client = new Client('ws://localhost:27100/ws');
|
|
13
|
+
*
|
|
14
|
+
* // Connect and authenticate
|
|
15
|
+
* await client.auth('player-token');
|
|
16
|
+
*
|
|
17
|
+
* // Join or create a room
|
|
18
|
+
* const room = await client.joinOrCreate<MyGameState>('poker', {
|
|
19
|
+
* maxPlayers: 6
|
|
20
|
+
* });
|
|
21
|
+
*
|
|
22
|
+
* // Listen to state changes
|
|
23
|
+
* room.onStateChange((state) => {
|
|
24
|
+
* console.log('New state:', state);
|
|
25
|
+
* });
|
|
26
|
+
*
|
|
27
|
+
* // Listen to custom messages
|
|
28
|
+
* room.onMessage('player_action', (message) => {
|
|
29
|
+
* console.log('Player action:', message);
|
|
30
|
+
* });
|
|
31
|
+
*
|
|
32
|
+
* // Send messages
|
|
33
|
+
* room.send('my_action', { type: 'move', x: 10, y: 20 });
|
|
34
|
+
*
|
|
35
|
+
* // Leave room
|
|
36
|
+
* await room.leave();
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export { Client, ClientOptions, ConnectionState } from './Client';
|
|
40
|
+
export { Room, RoomOptions } from './Room';
|
|
41
|
+
export type { RoomState, PlayerInfo, AvailableRoom, ErrorResponse, WsMessage, AuthResponse, CreateRoomResponse, JoinRoomResponse, JoinOrCreateResponse, RoomListResponse, ReconnectInfo, } from './types';
|
|
42
|
+
export { MessageId } from '@roomkit/core';
|
|
43
|
+
export { Client as default } from './Client';
|
|
44
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAGH,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAG3C,YAAY,EACV,SAAS,EACT,UAAU,EACV,aAAa,EACb,aAAa,EACb,SAAS,EACT,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,aAAa,GACd,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG1C,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,UAAU,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @roomkit/client - Client SDK for Gateway-Worker Framework
|
|
3
|
+
*
|
|
4
|
+
* A TypeScript client SDK inspired by Colyseus, providing an elegant API
|
|
5
|
+
* for connecting to Gateway-Worker game servers.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { Client } from '@roomkit/client';
|
|
10
|
+
*
|
|
11
|
+
* // Create client
|
|
12
|
+
* const client = new Client('ws://localhost:27100/ws');
|
|
13
|
+
*
|
|
14
|
+
* // Connect and authenticate
|
|
15
|
+
* await client.auth('player-token');
|
|
16
|
+
*
|
|
17
|
+
* // Join or create a room
|
|
18
|
+
* const room = await client.joinOrCreate<MyGameState>('poker', {
|
|
19
|
+
* maxPlayers: 6
|
|
20
|
+
* });
|
|
21
|
+
*
|
|
22
|
+
* // Listen to state changes
|
|
23
|
+
* room.onStateChange((state) => {
|
|
24
|
+
* console.log('New state:', state);
|
|
25
|
+
* });
|
|
26
|
+
*
|
|
27
|
+
* // Listen to custom messages
|
|
28
|
+
* room.onMessage('player_action', (message) => {
|
|
29
|
+
* console.log('Player action:', message);
|
|
30
|
+
* });
|
|
31
|
+
*
|
|
32
|
+
* // Send messages
|
|
33
|
+
* room.send('my_action', { type: 'move', x: 10, y: 20 });
|
|
34
|
+
*
|
|
35
|
+
* // Leave room
|
|
36
|
+
* await room.leave();
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
// Core classes
|
|
40
|
+
export { Client } from './Client';
|
|
41
|
+
export { Room } from './Room';
|
|
42
|
+
// Re-export MessageId from core
|
|
43
|
+
export { MessageId } from '@roomkit/core';
|
|
44
|
+
// Default export
|
|
45
|
+
export { Client as default } from './Client';
|
|
46
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,eAAe;AACf,OAAO,EAAE,MAAM,EAAkC,MAAM,UAAU,CAAC;AAClE,OAAO,EAAE,IAAI,EAAe,MAAM,QAAQ,CAAC;AAiB3C,gCAAgC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,iBAAiB;AACjB,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,UAAU,CAAC"}
|