@esengine/network 1.0.0 → 2.1.1

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.
@@ -1,62 +1,148 @@
1
- import { type MsgSync, type MsgSpawn, type MsgDespawn, type IPlayerInput } from '@esengine/network-protocols';
2
1
  /**
3
- * 连接状态
4
- * Connection state
2
+ * @zh 网络服务模块
3
+ * @en Network Service Module
5
4
  */
6
- export declare const enum ENetworkState {
5
+ import { RpcClient, type ProtocolDef, type ApiNames, type MsgNames, type ApiInput, type ApiOutput, type MsgData, type RpcClientOptions } from '@esengine/rpc/client';
6
+ import { type GameProtocol, type PlayerInput } from '../protocol';
7
+ /**
8
+ * @zh 连接状态
9
+ * @en Connection state
10
+ */
11
+ export declare const enum NetworkState {
7
12
  Disconnected = 0,
8
13
  Connecting = 1,
9
14
  Connected = 2
10
15
  }
11
16
  /**
12
- * 网络事件回调
13
- * Network event callbacks
17
+ * @zh 网络服务配置
18
+ * @en Network service options
14
19
  */
15
- export interface INetworkCallbacks {
16
- onConnected?: (clientId: number, roomId: string) => void;
17
- onDisconnected?: () => void;
18
- onSync?: (msg: MsgSync) => void;
19
- onSpawn?: (msg: MsgSpawn) => void;
20
- onDespawn?: (msg: MsgDespawn) => void;
21
- onError?: (error: Error) => void;
20
+ export interface NetworkServiceOptions extends RpcClientOptions {
21
+ /**
22
+ * @zh 服务器地址
23
+ * @en Server URL
24
+ */
25
+ url: string;
22
26
  }
23
27
  /**
24
- * 网络服务
25
- * Network service
28
+ * @zh RPC 服务基类
29
+ * @en RPC Service base class
30
+ *
31
+ * @zh 纯粹的 RPC 客户端封装,不包含任何游戏特定逻辑
32
+ * @en Pure RPC client wrapper without any game-specific logic
26
33
  *
27
- * 基于 TSRPC 的网络服务封装,提供类型安全的网络通信。
28
- * TSRPC-based network service wrapper with type-safe communication.
34
+ * @typeParam P - @zh 协议定义类型 @en Protocol definition type
29
35
  */
30
- export declare class NetworkService {
31
- private _client;
32
- private _state;
33
- private _clientId;
34
- private _roomId;
35
- private _callbacks;
36
- get state(): ENetworkState;
37
- get clientId(): number;
38
- get roomId(): string;
36
+ export declare class RpcService<P extends ProtocolDef> {
37
+ protected readonly _protocol: P;
38
+ protected _client: RpcClient<P> | null;
39
+ protected _state: NetworkState;
40
+ constructor(_protocol: P);
41
+ /**
42
+ * @zh 获取连接状态
43
+ * @en Get connection state
44
+ */
45
+ get state(): NetworkState;
46
+ /**
47
+ * @zh 是否已连接
48
+ * @en Whether connected
49
+ */
39
50
  get isConnected(): boolean;
40
51
  /**
41
- * 设置回调
42
- * Set callbacks
52
+ * @zh 获取底层 RPC 客户端
53
+ * @en Get underlying RPC client
54
+ */
55
+ get client(): RpcClient<P> | null;
56
+ /**
57
+ * @zh 连接到服务器
58
+ * @en Connect to server
59
+ */
60
+ connect(options: NetworkServiceOptions): Promise<void>;
61
+ /**
62
+ * @zh 断开连接
63
+ * @en Disconnect
64
+ */
65
+ disconnect(): void;
66
+ /**
67
+ * @zh 调用 API
68
+ * @en Call API
69
+ */
70
+ call<K extends ApiNames<P>>(name: K, input: ApiInput<P['api'][K]>): Promise<ApiOutput<P['api'][K]>>;
71
+ /**
72
+ * @zh 发送消息
73
+ * @en Send message
74
+ */
75
+ send<K extends MsgNames<P>>(name: K, data: MsgData<P['msg'][K]>): void;
76
+ /**
77
+ * @zh 监听消息
78
+ * @en Listen to message
79
+ */
80
+ on<K extends MsgNames<P>>(name: K, handler: (data: MsgData<P['msg'][K]>) => void): this;
81
+ /**
82
+ * @zh 取消监听消息
83
+ * @en Remove message listener
84
+ */
85
+ off<K extends MsgNames<P>>(name: K, handler?: (data: MsgData<P['msg'][K]>) => void): this;
86
+ /**
87
+ * @zh 监听消息(只触发一次)
88
+ * @en Listen to message (once)
89
+ */
90
+ once<K extends MsgNames<P>>(name: K, handler: (data: MsgData<P['msg'][K]>) => void): this;
91
+ }
92
+ /**
93
+ * @zh 游戏网络服务
94
+ * @en Game network service
95
+ *
96
+ * @zh 基于默认游戏协议的网络服务,提供游戏特定的便捷方法
97
+ * @en Network service based on default game protocol with game-specific convenience methods
98
+ *
99
+ * @example
100
+ * ```typescript
101
+ * const network = new GameNetworkService()
102
+ * await network.connect({ url: 'ws://localhost:3000' })
103
+ *
104
+ * // 游戏特定的便捷方法
105
+ * network.sendInput({ frame: 1, moveDir: { x: 1, y: 0 } })
106
+ *
107
+ * network.onSync((data) => {
108
+ * for (const entity of data.entities) {
109
+ * // 更新实体状态
110
+ * }
111
+ * })
112
+ * ```
113
+ */
114
+ export declare class GameNetworkService extends RpcService<GameProtocol> {
115
+ constructor();
116
+ /**
117
+ * @zh 发送玩家输入
118
+ * @en Send player input
43
119
  */
44
- setCallbacks(callbacks: INetworkCallbacks): void;
120
+ sendInput(input: PlayerInput): void;
45
121
  /**
46
- * 连接到服务器
47
- * Connect to server
122
+ * @zh 监听状态同步
123
+ * @en Listen to state sync
48
124
  */
49
- connect(serverUrl: string, playerName: string, roomId?: string): Promise<boolean>;
125
+ onSync(handler: (data: MsgData<GameProtocol['msg']['sync']>) => void): this;
50
126
  /**
51
- * 断开连接
52
- * Disconnect
127
+ * @zh 监听实体生成
128
+ * @en Listen to entity spawn
53
129
  */
54
- disconnect(): Promise<void>;
130
+ onSpawn(handler: (data: MsgData<GameProtocol['msg']['spawn']>) => void): this;
55
131
  /**
56
- * 发送输入
57
- * Send input
132
+ * @zh 监听实体销毁
133
+ * @en Listen to entity despawn
58
134
  */
59
- sendInput(input: IPlayerInput): void;
60
- private _setupListeners;
135
+ onDespawn(handler: (data: MsgData<GameProtocol['msg']['despawn']>) => void): this;
61
136
  }
137
+ /**
138
+ * @zh 网络服务(GameNetworkService 的别名)
139
+ * @en Network service (alias for GameNetworkService)
140
+ */
141
+ export { GameNetworkService as NetworkService };
142
+ /**
143
+ * @zh 创建网络服务
144
+ * @en Create network service
145
+ */
146
+ export declare function createNetworkService(): GameNetworkService;
147
+ export declare function createNetworkService<P extends ProtocolDef>(protocol: P): RpcService<P>;
62
148
  //# sourceMappingURL=NetworkService.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"NetworkService.d.ts","sourceRoot":"","sources":["../../src/services/NetworkService.ts"],"names":[],"mappings":"AACA,OAAO,EAGH,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,YAAY,EACpB,MAAM,6BAA6B,CAAC;AAErC;;;GAGG;AACH,0BAAkB,aAAa;IAC3B,YAAY,IAAI;IAChB,UAAU,IAAI;IACd,SAAS,IAAI;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAC9B,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,IAAI,CAAC;IAClC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IACtC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACpC;AAcD;;;;;;GAMG;AACH,qBAAa,cAAc;IACvB,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,MAAM,CAA6C;IAC3D,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,UAAU,CAAyB;IAE3C,IAAI,KAAK,IAAI,aAAa,CAEzB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED;;;OAGG;IACH,YAAY,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI;IAIhD;;;OAGG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAwCvF;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAUjC;;;OAGG;IACH,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAKpC,OAAO,CAAC,eAAe;CAqB1B"}
1
+ {"version":3,"file":"NetworkService.d.ts","sourceRoot":"","sources":["../../src/services/NetworkService.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,15 @@
1
+ /**
2
+ * @zh 网络输入系统
3
+ * @en Network Input System
4
+ */
1
5
  import { EntitySystem } from '@esengine/ecs-framework';
2
6
  import type { NetworkService } from '../services/NetworkService';
3
7
  /**
4
- * 网络输入系统
5
- * Network input system
8
+ * @zh 网络输入系统
9
+ * @en Network input system
6
10
  *
7
- * 收集本地玩家输入并发送到服务器。
8
- * Collects local player input and sends to server.
11
+ * @zh 收集本地玩家输入并发送到服务器
12
+ * @en Collects local player input and sends to server
9
13
  */
10
14
  export declare class NetworkInputSystem extends EntitySystem {
11
15
  private _networkService;
@@ -13,18 +17,18 @@ export declare class NetworkInputSystem extends EntitySystem {
13
17
  private _inputQueue;
14
18
  constructor(networkService: NetworkService);
15
19
  /**
16
- * 处理输入队列
17
- * Process input queue
20
+ * @zh 处理输入队列
21
+ * @en Process input queue
18
22
  */
19
23
  protected process(): void;
20
24
  /**
21
- * 添加移动输入
22
- * Add move input
25
+ * @zh 添加移动输入
26
+ * @en Add move input
23
27
  */
24
28
  addMoveInput(x: number, y: number): void;
25
29
  /**
26
- * 添加动作输入
27
- * Add action input
30
+ * @zh 添加动作输入
31
+ * @en Add action input
28
32
  */
29
33
  addActionInput(action: string): void;
30
34
  protected onDestroy(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"NetworkInputSystem.d.ts","sourceRoot":"","sources":["../../src/systems/NetworkInputSystem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAW,MAAM,yBAAyB,CAAC;AAEhE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE;;;;;;GAMG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;IAChD,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,WAAW,CAAsB;gBAE7B,cAAc,EAAE,cAAc;IAO1C;;;OAGG;cACgB,OAAO,IAAI,IAAI;IAclC;;;OAGG;IACI,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAO/C;;;OAGG;IACI,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;cAaxB,SAAS,IAAI,IAAI;CAGvC"}
1
+ {"version":3,"file":"NetworkInputSystem.d.ts","sourceRoot":"","sources":["../../src/systems/NetworkInputSystem.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAW,MAAM,yBAAyB,CAAA;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAEhE;;;;;;GAMG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;IAChD,OAAO,CAAC,eAAe,CAAgB;IACvC,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,WAAW,CAAoB;gBAE3B,cAAc,EAAE,cAAc;IAK1C;;;OAGG;cACgB,OAAO,IAAI,IAAI;IAYlC;;;OAGG;IACI,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAO/C;;;OAGG;IACI,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;cAaxB,SAAS,IAAI,IAAI;CAGvC"}
@@ -1,37 +1,68 @@
1
1
  import { EntitySystem, Entity, type Scene } from '@esengine/ecs-framework';
2
- import type { MsgSpawn } from '@esengine/network-protocols';
3
- import type { NetworkService } from '../services/NetworkService';
4
2
  import type { NetworkSyncSystem } from './NetworkSyncSystem';
5
3
  /**
6
- * 预制体工厂函数类型
7
- * Prefab factory function type
4
+ * @zh 生成消息接口
5
+ * @en Spawn message interface
8
6
  */
9
- export type PrefabFactory = (scene: Scene, spawn: MsgSpawn) => Entity;
7
+ export interface SpawnMessage {
8
+ netId: number;
9
+ ownerId: number;
10
+ prefab: string;
11
+ pos: {
12
+ x: number;
13
+ y: number;
14
+ };
15
+ rot?: number;
16
+ }
17
+ /**
18
+ * @zh 销毁消息接口
19
+ * @en Despawn message interface
20
+ */
21
+ export interface DespawnMessage {
22
+ netId: number;
23
+ }
24
+ /**
25
+ * @zh 预制体工厂函数类型
26
+ * @en Prefab factory function type
27
+ */
28
+ export type PrefabFactory = (scene: Scene, spawn: SpawnMessage) => Entity;
10
29
  /**
11
- * 网络生成系统
12
- * Network spawn system
30
+ * @zh 网络生成系统
31
+ * @en Network spawn system
13
32
  *
14
- * 处理网络实体的生成和销毁。
15
- * Handles spawning and despawning of networked entities.
33
+ * @zh 处理网络实体的生成和销毁
34
+ * @en Handles spawning and despawning of networked entities
16
35
  */
17
36
  export declare class NetworkSpawnSystem extends EntitySystem {
18
- private _networkService;
19
37
  private _syncSystem;
20
38
  private _prefabFactories;
21
- constructor(networkService: NetworkService, syncSystem: NetworkSyncSystem);
22
- protected onInitialize(): void;
39
+ private _localPlayerId;
40
+ constructor(syncSystem: NetworkSyncSystem);
41
+ /**
42
+ * @zh 设置本地玩家 ID
43
+ * @en Set local player ID
44
+ */
45
+ setLocalPlayerId(id: number): void;
46
+ /**
47
+ * @zh 处理生成消息
48
+ * @en Handle spawn message
49
+ */
50
+ handleSpawn(msg: SpawnMessage): Entity | null;
51
+ /**
52
+ * @zh 处理销毁消息
53
+ * @en Handle despawn message
54
+ */
55
+ handleDespawn(msg: DespawnMessage): void;
23
56
  /**
24
- * 注册预制体工厂
25
- * Register prefab factory
57
+ * @zh 注册预制体工厂
58
+ * @en Register prefab factory
26
59
  */
27
60
  registerPrefab(prefabType: string, factory: PrefabFactory): void;
28
61
  /**
29
- * 注销预制体工厂
30
- * Unregister prefab factory
62
+ * @zh 注销预制体工厂
63
+ * @en Unregister prefab factory
31
64
  */
32
65
  unregisterPrefab(prefabType: string): void;
33
- private _handleSpawn;
34
- private _handleDespawn;
35
66
  protected onDestroy(): void;
36
67
  }
37
68
  //# sourceMappingURL=NetworkSpawnSystem.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"NetworkSpawnSystem.d.ts","sourceRoot":"","sources":["../../src/systems/NetworkSpawnSystem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,KAAK,EAAW,MAAM,yBAAyB,CAAC;AACpF,OAAO,KAAK,EAAE,QAAQ,EAAc,MAAM,6BAA6B,CAAC;AAGxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,KAAK,MAAM,CAAC;AAEtE;;;;;;GAMG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;IAChD,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,gBAAgB,CAAyC;gBAErD,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,iBAAiB;cAQtD,YAAY,IAAI,IAAI;IAOvC;;;OAGG;IACI,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI;IAIvE;;;OAGG;IACI,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIjD,OAAO,CAAC,YAAY;IA6BpB,OAAO,CAAC,cAAc;cAYH,SAAS,IAAI,IAAI;CAGvC"}
1
+ {"version":3,"file":"NetworkSpawnSystem.d.ts","sourceRoot":"","sources":["../../src/systems/NetworkSpawnSystem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,KAAK,EAAW,MAAM,yBAAyB,CAAA;AAGnF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAE5D;;;GAGG;AACH,MAAM,WAAW,YAAY;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC3B,KAAK,EAAE,MAAM,CAAA;CAChB;AAED;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,KAAK,MAAM,CAAA;AAEzE;;;;;;GAMG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;IAChD,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,gBAAgB,CAAwC;IAChE,OAAO,CAAC,cAAc,CAAY;gBAEtB,UAAU,EAAE,iBAAiB;IAKzC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIlC;;;OAGG;IACH,WAAW,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI;IA2B7C;;;OAGG;IACH,aAAa,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI;IAYxC;;;OAGG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI;IAIhE;;;OAGG;IACH,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;cAIvB,SAAS,IAAI,IAAI;CAGvC"}
@@ -1,38 +1,49 @@
1
1
  import { EntitySystem, type Entity } from '@esengine/ecs-framework';
2
- import type { NetworkService } from '../services/NetworkService';
3
2
  /**
4
- * 网络同步系统
5
- * Network sync system
3
+ * @zh 同步消息接口
4
+ * @en Sync message interface
5
+ */
6
+ export interface SyncMessage {
7
+ entities: Array<{
8
+ netId: number;
9
+ pos?: {
10
+ x: number;
11
+ y: number;
12
+ };
13
+ rot?: number;
14
+ }>;
15
+ }
16
+ /**
17
+ * @zh 网络同步系统
18
+ * @en Network sync system
6
19
  *
7
- * 处理网络实体的状态同步和插值。
8
- * Handles state synchronization and interpolation for networked entities.
20
+ * @zh 处理网络实体的状态同步和插值
21
+ * @en Handles state synchronization and interpolation for networked entities
9
22
  */
10
23
  export declare class NetworkSyncSystem extends EntitySystem {
11
- private _networkService;
12
24
  private _netIdToEntity;
13
- constructor(networkService: NetworkService);
14
- protected onInitialize(): void;
25
+ constructor();
15
26
  /**
16
- * 处理实体列表
17
- * Process entities
27
+ * @zh 处理同步消息
28
+ * @en Handle sync message
18
29
  */
30
+ handleSync(msg: SyncMessage): void;
19
31
  protected process(entities: readonly Entity[]): void;
20
32
  /**
21
- * 注册网络实体
22
- * Register network entity
33
+ * @zh 注册网络实体
34
+ * @en Register network entity
23
35
  */
24
36
  registerEntity(netId: number, entityId: number): void;
25
37
  /**
26
- * 注销网络实体
27
- * Unregister network entity
38
+ * @zh 注销网络实体
39
+ * @en Unregister network entity
28
40
  */
29
41
  unregisterEntity(netId: number): void;
30
42
  /**
31
- * 根据网络 ID 获取实体 ID
32
- * Get entity ID by network ID
43
+ * @zh 根据网络 ID 获取实体 ID
44
+ * @en Get entity ID by network ID
33
45
  */
34
46
  getEntityId(netId: number): number | undefined;
35
- private _handleSync;
36
47
  private _interpolate;
37
48
  protected onDestroy(): void;
38
49
  }
@@ -1 +1 @@
1
- {"version":3,"file":"NetworkSyncSystem.d.ts","sourceRoot":"","sources":["../../src/systems/NetworkSyncSystem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAiB,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAInF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE;;;;;;GAMG;AACH,qBAAa,iBAAkB,SAAQ,YAAY;IAC/C,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,cAAc,CAAkC;gBAE5C,cAAc,EAAE,cAAc;cAKvB,YAAY,IAAI,IAAI;IAMvC;;;OAGG;cACgB,OAAO,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI;IAe7D;;;OAGG;IACI,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAI5D;;;OAGG;IACI,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI5C;;;OAGG;IACI,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIrD,OAAO,CAAC,WAAW;IAenB,OAAO,CAAC,YAAY;cAcD,SAAS,IAAI,IAAI;CAGvC"}
1
+ {"version":3,"file":"NetworkSyncSystem.d.ts","sourceRoot":"","sources":["../../src/systems/NetworkSyncSystem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAiB,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAIlF;;;GAGG;AACH,MAAM,WAAW,WAAW;IACxB,QAAQ,EAAE,KAAK,CAAC;QACZ,KAAK,EAAE,MAAM,CAAA;QACb,GAAG,CAAC,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;QAC9B,GAAG,CAAC,EAAE,MAAM,CAAA;KACf,CAAC,CAAA;CACL;AAED;;;;;;GAMG;AACH,qBAAa,iBAAkB,SAAQ,YAAY;IAC/C,OAAO,CAAC,cAAc,CAAiC;;IAMvD;;;OAGG;IACH,UAAU,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI;cAef,OAAO,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI;IAa7D;;;OAGG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIrD;;;OAGG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIrC;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI9C,OAAO,CAAC,YAAY;cAYD,SAAS,IAAI,IAAI;CAGvC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@esengine/network",
3
- "version": "1.0.0",
4
- "description": "Network synchronization for multiplayer games based on TSRPC",
3
+ "version": "2.1.1",
4
+ "description": "Network synchronization for multiplayer games",
5
5
  "esengine": {
6
6
  "plugin": true,
7
7
  "pluginExport": "NetworkPlugin",
@@ -22,15 +22,14 @@
22
22
  "dist"
23
23
  ],
24
24
  "dependencies": {
25
- "tsrpc-browser": "^3.4.16",
26
- "@esengine/network-protocols": "1.0.0"
25
+ "@esengine/rpc": "1.1.1"
27
26
  },
28
27
  "devDependencies": {
29
28
  "rimraf": "^5.0.5",
30
29
  "tsup": "^8.0.0",
31
30
  "typescript": "^5.3.3",
32
- "@esengine/blueprint": "1.0.0",
33
- "@esengine/ecs-framework": "2.4.2",
31
+ "@esengine/blueprint": "1.0.2",
32
+ "@esengine/ecs-framework": "2.4.4",
34
33
  "@esengine/build-config": "1.0.0"
35
34
  },
36
35
  "keywords": [
@@ -43,7 +42,7 @@
43
42
  "author": "yhh",
44
43
  "license": "MIT",
45
44
  "scripts": {
46
- "build": "tsup && tsc --project tsconfig.build.json --declaration --emitDeclarationOnly --outDir dist",
45
+ "build": "tsup && tsc -p tsconfig.build.json --emitDeclarationOnly",
47
46
  "build:watch": "tsup --watch",
48
47
  "type-check": "tsc --noEmit",
49
48
  "clean": "rimraf dist"