@esengine/server 1.1.4 → 1.2.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/dist/Room-BnKpl5Sj.d.ts +237 -0
- package/dist/auth/index.d.ts +711 -0
- package/dist/auth/index.js +707 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/testing/index.d.ts +153 -0
- package/dist/auth/testing/index.js +165 -0
- package/dist/auth/testing/index.js.map +1 -0
- package/dist/chunk-7C6JZO4O.js +744 -0
- package/dist/chunk-7C6JZO4O.js.map +1 -0
- package/dist/chunk-T626JPC7.js +8 -0
- package/dist/chunk-T626JPC7.js.map +1 -0
- package/dist/index-DgaJIm6-.d.ts +170 -0
- package/dist/index.d.ts +4 -403
- package/dist/index.js +3 -745
- package/dist/index.js.map +1 -1
- package/dist/testing/index.d.ts +386 -0
- package/dist/testing/index.js +629 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/types-BmO5ykKp.d.ts +311 -0
- package/package.json +26 -3
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { Connection } from '@esengine/rpc';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @zh 玩家类
|
|
5
|
+
* @en Player class
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @zh 玩家接口
|
|
10
|
+
* @en Player interface
|
|
11
|
+
*/
|
|
12
|
+
interface IPlayer<TData = Record<string, unknown>> {
|
|
13
|
+
readonly id: string;
|
|
14
|
+
readonly roomId: string;
|
|
15
|
+
data: TData;
|
|
16
|
+
send<T>(type: string, data: T): void;
|
|
17
|
+
leave(reason?: string): void;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* @zh 玩家实现
|
|
21
|
+
* @en Player implementation
|
|
22
|
+
*/
|
|
23
|
+
declare class Player<TData = Record<string, unknown>> implements IPlayer<TData> {
|
|
24
|
+
readonly id: string;
|
|
25
|
+
readonly roomId: string;
|
|
26
|
+
data: TData;
|
|
27
|
+
private _conn;
|
|
28
|
+
private _sendFn;
|
|
29
|
+
private _leaveFn;
|
|
30
|
+
constructor(options: {
|
|
31
|
+
id: string;
|
|
32
|
+
roomId: string;
|
|
33
|
+
conn: Connection<any>;
|
|
34
|
+
sendFn: (conn: Connection<any>, type: string, data: unknown) => void;
|
|
35
|
+
leaveFn: (player: Player<TData>, reason?: string) => void;
|
|
36
|
+
initialData?: TData;
|
|
37
|
+
});
|
|
38
|
+
/**
|
|
39
|
+
* @zh 获取底层连接
|
|
40
|
+
* @en Get underlying connection
|
|
41
|
+
*/
|
|
42
|
+
get connection(): Connection<any>;
|
|
43
|
+
/**
|
|
44
|
+
* @zh 发送消息给玩家
|
|
45
|
+
* @en Send message to player
|
|
46
|
+
*/
|
|
47
|
+
send<T>(type: string, data: T): void;
|
|
48
|
+
/**
|
|
49
|
+
* @zh 让玩家离开房间
|
|
50
|
+
* @en Make player leave the room
|
|
51
|
+
*/
|
|
52
|
+
leave(reason?: string): void;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* @zh 房间基类
|
|
57
|
+
* @en Room base class
|
|
58
|
+
*/
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* @zh 房间配置
|
|
62
|
+
* @en Room options
|
|
63
|
+
*/
|
|
64
|
+
interface RoomOptions {
|
|
65
|
+
[key: string]: unknown;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* @zh 房间基类
|
|
69
|
+
* @en Room base class
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```typescript
|
|
73
|
+
* class GameRoom extends Room {
|
|
74
|
+
* maxPlayers = 4
|
|
75
|
+
* tickRate = 20
|
|
76
|
+
*
|
|
77
|
+
* onJoin(player: Player) {
|
|
78
|
+
* this.broadcast('Joined', { id: player.id })
|
|
79
|
+
* }
|
|
80
|
+
*
|
|
81
|
+
* @onMessage('Move')
|
|
82
|
+
* handleMove(data: { x: number, y: number }, player: Player) {
|
|
83
|
+
* // handle move
|
|
84
|
+
* }
|
|
85
|
+
* }
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
declare abstract class Room<TState = any, TPlayerData = Record<string, unknown>> {
|
|
89
|
+
/**
|
|
90
|
+
* @zh 最大玩家数
|
|
91
|
+
* @en Maximum players
|
|
92
|
+
*/
|
|
93
|
+
maxPlayers: number;
|
|
94
|
+
/**
|
|
95
|
+
* @zh Tick 速率(每秒),0 = 不自动 tick
|
|
96
|
+
* @en Tick rate (per second), 0 = no auto tick
|
|
97
|
+
*/
|
|
98
|
+
tickRate: number;
|
|
99
|
+
/**
|
|
100
|
+
* @zh 空房间自动销毁
|
|
101
|
+
* @en Auto dispose when empty
|
|
102
|
+
*/
|
|
103
|
+
autoDispose: boolean;
|
|
104
|
+
/**
|
|
105
|
+
* @zh 房间状态
|
|
106
|
+
* @en Room state
|
|
107
|
+
*/
|
|
108
|
+
state: TState;
|
|
109
|
+
private _id;
|
|
110
|
+
private _players;
|
|
111
|
+
private _locked;
|
|
112
|
+
private _disposed;
|
|
113
|
+
private _tickInterval;
|
|
114
|
+
private _lastTickTime;
|
|
115
|
+
private _broadcastFn;
|
|
116
|
+
private _sendFn;
|
|
117
|
+
private _disposeFn;
|
|
118
|
+
/**
|
|
119
|
+
* @zh 房间 ID
|
|
120
|
+
* @en Room ID
|
|
121
|
+
*/
|
|
122
|
+
get id(): string;
|
|
123
|
+
/**
|
|
124
|
+
* @zh 所有玩家
|
|
125
|
+
* @en All players
|
|
126
|
+
*/
|
|
127
|
+
get players(): ReadonlyArray<Player<TPlayerData>>;
|
|
128
|
+
/**
|
|
129
|
+
* @zh 玩家数量
|
|
130
|
+
* @en Player count
|
|
131
|
+
*/
|
|
132
|
+
get playerCount(): number;
|
|
133
|
+
/**
|
|
134
|
+
* @zh 是否已满
|
|
135
|
+
* @en Is full
|
|
136
|
+
*/
|
|
137
|
+
get isFull(): boolean;
|
|
138
|
+
/**
|
|
139
|
+
* @zh 是否已锁定
|
|
140
|
+
* @en Is locked
|
|
141
|
+
*/
|
|
142
|
+
get isLocked(): boolean;
|
|
143
|
+
/**
|
|
144
|
+
* @zh 是否已销毁
|
|
145
|
+
* @en Is disposed
|
|
146
|
+
*/
|
|
147
|
+
get isDisposed(): boolean;
|
|
148
|
+
/**
|
|
149
|
+
* @zh 房间创建时调用
|
|
150
|
+
* @en Called when room is created
|
|
151
|
+
*/
|
|
152
|
+
onCreate(options?: RoomOptions): void | Promise<void>;
|
|
153
|
+
/**
|
|
154
|
+
* @zh 玩家加入时调用
|
|
155
|
+
* @en Called when player joins
|
|
156
|
+
*/
|
|
157
|
+
onJoin(player: Player<TPlayerData>): void | Promise<void>;
|
|
158
|
+
/**
|
|
159
|
+
* @zh 玩家离开时调用
|
|
160
|
+
* @en Called when player leaves
|
|
161
|
+
*/
|
|
162
|
+
onLeave(player: Player<TPlayerData>, reason?: string): void | Promise<void>;
|
|
163
|
+
/**
|
|
164
|
+
* @zh 游戏循环
|
|
165
|
+
* @en Game tick
|
|
166
|
+
*/
|
|
167
|
+
onTick(dt: number): void;
|
|
168
|
+
/**
|
|
169
|
+
* @zh 房间销毁时调用
|
|
170
|
+
* @en Called when room is disposed
|
|
171
|
+
*/
|
|
172
|
+
onDispose(): void | Promise<void>;
|
|
173
|
+
/**
|
|
174
|
+
* @zh 广播消息给所有玩家
|
|
175
|
+
* @en Broadcast message to all players
|
|
176
|
+
*/
|
|
177
|
+
broadcast<T>(type: string, data: T): void;
|
|
178
|
+
/**
|
|
179
|
+
* @zh 广播消息给除指定玩家外的所有玩家
|
|
180
|
+
* @en Broadcast message to all players except one
|
|
181
|
+
*/
|
|
182
|
+
broadcastExcept<T>(except: Player<TPlayerData>, type: string, data: T): void;
|
|
183
|
+
/**
|
|
184
|
+
* @zh 获取玩家
|
|
185
|
+
* @en Get player by id
|
|
186
|
+
*/
|
|
187
|
+
getPlayer(id: string): Player<TPlayerData> | undefined;
|
|
188
|
+
/**
|
|
189
|
+
* @zh 踢出玩家
|
|
190
|
+
* @en Kick player
|
|
191
|
+
*/
|
|
192
|
+
kick(player: Player<TPlayerData>, reason?: string): void;
|
|
193
|
+
/**
|
|
194
|
+
* @zh 锁定房间
|
|
195
|
+
* @en Lock room
|
|
196
|
+
*/
|
|
197
|
+
lock(): void;
|
|
198
|
+
/**
|
|
199
|
+
* @zh 解锁房间
|
|
200
|
+
* @en Unlock room
|
|
201
|
+
*/
|
|
202
|
+
unlock(): void;
|
|
203
|
+
/**
|
|
204
|
+
* @zh 手动销毁房间
|
|
205
|
+
* @en Manually dispose room
|
|
206
|
+
*/
|
|
207
|
+
dispose(): void;
|
|
208
|
+
/**
|
|
209
|
+
* @internal
|
|
210
|
+
*/
|
|
211
|
+
_init(options: {
|
|
212
|
+
id: string;
|
|
213
|
+
sendFn: (conn: any, type: string, data: unknown) => void;
|
|
214
|
+
broadcastFn: (type: string, data: unknown) => void;
|
|
215
|
+
disposeFn: () => void;
|
|
216
|
+
}): void;
|
|
217
|
+
/**
|
|
218
|
+
* @internal
|
|
219
|
+
*/
|
|
220
|
+
_create(options?: RoomOptions): Promise<void>;
|
|
221
|
+
/**
|
|
222
|
+
* @internal
|
|
223
|
+
*/
|
|
224
|
+
_addPlayer(id: string, conn: any): Promise<Player<TPlayerData> | null>;
|
|
225
|
+
/**
|
|
226
|
+
* @internal
|
|
227
|
+
*/
|
|
228
|
+
_removePlayer(id: string, reason?: string): Promise<void>;
|
|
229
|
+
/**
|
|
230
|
+
* @internal
|
|
231
|
+
*/
|
|
232
|
+
_handleMessage(type: string, data: unknown, playerId: string): void;
|
|
233
|
+
private _startTick;
|
|
234
|
+
private _stopTick;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
export { type IPlayer as I, Player as P, Room as R, type RoomOptions as a };
|