@esengine/server 1.1.3 → 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/index.d.ts CHANGED
@@ -1,173 +1,8 @@
1
- import { Connection } from '@esengine/rpc';
1
+ import { S as ServerConfig, G as GameServer, A as ApiDefinition, M as MsgDefinition } from './index-DgaJIm6-.js';
2
+ export { b as ApiContext, c as MsgContext, a as ServerConnection } from './index-DgaJIm6-.js';
3
+ export { I as IPlayer, P as Player, R as Room, a as RoomOptions } from './Room-BnKpl5Sj.js';
2
4
  export { ErrorCode, RpcError } from '@esengine/rpc';
3
5
 
4
- /**
5
- * @zh ESEngine Server 类型定义
6
- * @en ESEngine Server type definitions
7
- */
8
-
9
- /**
10
- * @zh 服务器配置
11
- * @en Server configuration
12
- */
13
- interface ServerConfig {
14
- /**
15
- * @zh 监听端口
16
- * @en Listen port
17
- * @default 3000
18
- */
19
- port?: number;
20
- /**
21
- * @zh API 目录路径
22
- * @en API directory path
23
- * @default 'src/api'
24
- */
25
- apiDir?: string;
26
- /**
27
- * @zh 消息处理器目录路径
28
- * @en Message handlers directory path
29
- * @default 'src/msg'
30
- */
31
- msgDir?: string;
32
- /**
33
- * @zh 游戏 Tick 速率 (每秒)
34
- * @en Game tick rate (per second)
35
- * @default 20
36
- */
37
- tickRate?: number;
38
- /**
39
- * @zh 服务器启动回调
40
- * @en Server start callback
41
- */
42
- onStart?: (port: number) => void;
43
- /**
44
- * @zh 连接建立回调
45
- * @en Connection established callback
46
- */
47
- onConnect?: (conn: ServerConnection) => void | Promise<void>;
48
- /**
49
- * @zh 连接断开回调
50
- * @en Connection closed callback
51
- */
52
- onDisconnect?: (conn: ServerConnection) => void | Promise<void>;
53
- }
54
- /**
55
- * @zh 服务器连接(扩展 RPC Connection)
56
- * @en Server connection (extends RPC Connection)
57
- */
58
- interface ServerConnection<TData = Record<string, unknown>> extends Connection<TData> {
59
- /**
60
- * @zh 连接唯一标识(继承自 Connection)
61
- * @en Connection unique identifier (inherited from Connection)
62
- */
63
- readonly id: string;
64
- /**
65
- * @zh 用户自定义数据
66
- * @en User-defined data
67
- */
68
- data: TData;
69
- }
70
- /**
71
- * @zh API 处理器上下文
72
- * @en API handler context
73
- */
74
- interface ApiContext<TData = Record<string, unknown>> {
75
- /**
76
- * @zh 当前连接
77
- * @en Current connection
78
- */
79
- conn: ServerConnection<TData>;
80
- /**
81
- * @zh 服务器实例
82
- * @en Server instance
83
- */
84
- server: GameServer;
85
- }
86
- /**
87
- * @zh API 定义选项
88
- * @en API definition options
89
- */
90
- interface ApiDefinition<TReq = unknown, TRes = unknown, TData = Record<string, unknown>> {
91
- /**
92
- * @zh API 处理函数
93
- * @en API handler function
94
- */
95
- handler: (req: TReq, ctx: ApiContext<TData>) => TRes | Promise<TRes>;
96
- /**
97
- * @zh 请求验证函数(可选)
98
- * @en Request validation function (optional)
99
- */
100
- validate?: (req: unknown) => req is TReq;
101
- }
102
- /**
103
- * @zh 消息处理器上下文
104
- * @en Message handler context
105
- */
106
- interface MsgContext<TData = Record<string, unknown>> {
107
- /**
108
- * @zh 当前连接
109
- * @en Current connection
110
- */
111
- conn: ServerConnection<TData>;
112
- /**
113
- * @zh 服务器实例
114
- * @en Server instance
115
- */
116
- server: GameServer;
117
- }
118
- /**
119
- * @zh 消息定义选项
120
- * @en Message definition options
121
- */
122
- interface MsgDefinition<TMsg = unknown, TData = Record<string, unknown>> {
123
- /**
124
- * @zh 消息处理函数
125
- * @en Message handler function
126
- */
127
- handler: (msg: TMsg, ctx: MsgContext<TData>) => void | Promise<void>;
128
- }
129
- /**
130
- * @zh 游戏服务器接口
131
- * @en Game server interface
132
- */
133
- interface GameServer {
134
- /**
135
- * @zh 启动服务器
136
- * @en Start server
137
- */
138
- start(): Promise<void>;
139
- /**
140
- * @zh 停止服务器
141
- * @en Stop server
142
- */
143
- stop(): Promise<void>;
144
- /**
145
- * @zh 广播消息
146
- * @en Broadcast message
147
- */
148
- broadcast<T>(name: string, data: T): void;
149
- /**
150
- * @zh 发送消息给指定连接
151
- * @en Send message to specific connection
152
- */
153
- send<T>(conn: ServerConnection, name: string, data: T): void;
154
- /**
155
- * @zh 获取所有连接
156
- * @en Get all connections
157
- */
158
- readonly connections: ReadonlyArray<ServerConnection>;
159
- /**
160
- * @zh 当前 Tick
161
- * @en Current tick
162
- */
163
- readonly tick: number;
164
- /**
165
- * @zh 注册房间类型
166
- * @en Define room type
167
- */
168
- define(name: string, roomClass: new () => unknown): void;
169
- }
170
-
171
6
  /**
172
7
  * @zh 游戏服务器核心
173
8
  * @en Game server core
@@ -235,240 +70,6 @@ declare function defineApi<TReq, TRes, TData = Record<string, unknown>>(definiti
235
70
  */
236
71
  declare function defineMsg<TMsg, TData = Record<string, unknown>>(definition: MsgDefinition<TMsg, TData>): MsgDefinition<TMsg, TData>;
237
72
 
238
- /**
239
- * @zh 玩家类
240
- * @en Player class
241
- */
242
-
243
- /**
244
- * @zh 玩家接口
245
- * @en Player interface
246
- */
247
- interface IPlayer<TData = Record<string, unknown>> {
248
- readonly id: string;
249
- readonly roomId: string;
250
- data: TData;
251
- send<T>(type: string, data: T): void;
252
- leave(reason?: string): void;
253
- }
254
- /**
255
- * @zh 玩家实现
256
- * @en Player implementation
257
- */
258
- declare class Player<TData = Record<string, unknown>> implements IPlayer<TData> {
259
- readonly id: string;
260
- readonly roomId: string;
261
- data: TData;
262
- private _conn;
263
- private _sendFn;
264
- private _leaveFn;
265
- constructor(options: {
266
- id: string;
267
- roomId: string;
268
- conn: Connection<any>;
269
- sendFn: (conn: Connection<any>, type: string, data: unknown) => void;
270
- leaveFn: (player: Player<TData>, reason?: string) => void;
271
- initialData?: TData;
272
- });
273
- /**
274
- * @zh 获取底层连接
275
- * @en Get underlying connection
276
- */
277
- get connection(): Connection<any>;
278
- /**
279
- * @zh 发送消息给玩家
280
- * @en Send message to player
281
- */
282
- send<T>(type: string, data: T): void;
283
- /**
284
- * @zh 让玩家离开房间
285
- * @en Make player leave the room
286
- */
287
- leave(reason?: string): void;
288
- }
289
-
290
- /**
291
- * @zh 房间基类
292
- * @en Room base class
293
- */
294
-
295
- /**
296
- * @zh 房间配置
297
- * @en Room options
298
- */
299
- interface RoomOptions {
300
- [key: string]: unknown;
301
- }
302
- /**
303
- * @zh 房间基类
304
- * @en Room base class
305
- *
306
- * @example
307
- * ```typescript
308
- * class GameRoom extends Room {
309
- * maxPlayers = 4
310
- * tickRate = 20
311
- *
312
- * onJoin(player: Player) {
313
- * this.broadcast('Joined', { id: player.id })
314
- * }
315
- *
316
- * @onMessage('Move')
317
- * handleMove(data: { x: number, y: number }, player: Player) {
318
- * // handle move
319
- * }
320
- * }
321
- * ```
322
- */
323
- declare abstract class Room<TState = any, TPlayerData = Record<string, unknown>> {
324
- /**
325
- * @zh 最大玩家数
326
- * @en Maximum players
327
- */
328
- maxPlayers: number;
329
- /**
330
- * @zh Tick 速率(每秒),0 = 不自动 tick
331
- * @en Tick rate (per second), 0 = no auto tick
332
- */
333
- tickRate: number;
334
- /**
335
- * @zh 空房间自动销毁
336
- * @en Auto dispose when empty
337
- */
338
- autoDispose: boolean;
339
- /**
340
- * @zh 房间状态
341
- * @en Room state
342
- */
343
- state: TState;
344
- private _id;
345
- private _players;
346
- private _locked;
347
- private _disposed;
348
- private _tickInterval;
349
- private _lastTickTime;
350
- private _broadcastFn;
351
- private _sendFn;
352
- private _disposeFn;
353
- /**
354
- * @zh 房间 ID
355
- * @en Room ID
356
- */
357
- get id(): string;
358
- /**
359
- * @zh 所有玩家
360
- * @en All players
361
- */
362
- get players(): ReadonlyArray<Player<TPlayerData>>;
363
- /**
364
- * @zh 玩家数量
365
- * @en Player count
366
- */
367
- get playerCount(): number;
368
- /**
369
- * @zh 是否已满
370
- * @en Is full
371
- */
372
- get isFull(): boolean;
373
- /**
374
- * @zh 是否已锁定
375
- * @en Is locked
376
- */
377
- get isLocked(): boolean;
378
- /**
379
- * @zh 是否已销毁
380
- * @en Is disposed
381
- */
382
- get isDisposed(): boolean;
383
- /**
384
- * @zh 房间创建时调用
385
- * @en Called when room is created
386
- */
387
- onCreate(options?: RoomOptions): void | Promise<void>;
388
- /**
389
- * @zh 玩家加入时调用
390
- * @en Called when player joins
391
- */
392
- onJoin(player: Player<TPlayerData>): void | Promise<void>;
393
- /**
394
- * @zh 玩家离开时调用
395
- * @en Called when player leaves
396
- */
397
- onLeave(player: Player<TPlayerData>, reason?: string): void | Promise<void>;
398
- /**
399
- * @zh 游戏循环
400
- * @en Game tick
401
- */
402
- onTick(dt: number): void;
403
- /**
404
- * @zh 房间销毁时调用
405
- * @en Called when room is disposed
406
- */
407
- onDispose(): void | Promise<void>;
408
- /**
409
- * @zh 广播消息给所有玩家
410
- * @en Broadcast message to all players
411
- */
412
- broadcast<T>(type: string, data: T): void;
413
- /**
414
- * @zh 广播消息给除指定玩家外的所有玩家
415
- * @en Broadcast message to all players except one
416
- */
417
- broadcastExcept<T>(except: Player<TPlayerData>, type: string, data: T): void;
418
- /**
419
- * @zh 获取玩家
420
- * @en Get player by id
421
- */
422
- getPlayer(id: string): Player<TPlayerData> | undefined;
423
- /**
424
- * @zh 踢出玩家
425
- * @en Kick player
426
- */
427
- kick(player: Player<TPlayerData>, reason?: string): void;
428
- /**
429
- * @zh 锁定房间
430
- * @en Lock room
431
- */
432
- lock(): void;
433
- /**
434
- * @zh 解锁房间
435
- * @en Unlock room
436
- */
437
- unlock(): void;
438
- /**
439
- * @zh 手动销毁房间
440
- * @en Manually dispose room
441
- */
442
- dispose(): void;
443
- /**
444
- * @internal
445
- */
446
- _init(options: {
447
- id: string;
448
- sendFn: (conn: any, type: string, data: unknown) => void;
449
- broadcastFn: (type: string, data: unknown) => void;
450
- disposeFn: () => void;
451
- }): void;
452
- /**
453
- * @internal
454
- */
455
- _create(options?: RoomOptions): Promise<void>;
456
- /**
457
- * @internal
458
- */
459
- _addPlayer(id: string, conn: any): Promise<Player<TPlayerData> | null>;
460
- /**
461
- * @internal
462
- */
463
- _removePlayer(id: string, reason?: string): Promise<void>;
464
- /**
465
- * @internal
466
- */
467
- _handleMessage(type: string, data: unknown, playerId: string): void;
468
- private _startTick;
469
- private _stopTick;
470
- }
471
-
472
73
  /**
473
74
  * @zh 房间装饰器
474
75
  * @en Room decorators
@@ -494,4 +95,4 @@ declare abstract class Room<TState = any, TPlayerData = Record<string, unknown>>
494
95
  */
495
96
  declare function onMessage(type: string): MethodDecorator;
496
97
 
497
- export { type ApiContext, type ApiDefinition, type GameServer, type IPlayer, type MsgContext, type MsgDefinition, Player, Room, type RoomOptions, type ServerConfig, type ServerConnection, createServer, defineApi, defineMsg, onMessage };
98
+ export { ApiDefinition, GameServer, MsgDefinition, ServerConfig, createServer, defineApi, defineMsg, onMessage };