@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.
package/dist/index.js CHANGED
@@ -4,7 +4,46 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
4
4
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
5
 
6
6
  // src/index.ts
7
- import { serviceProto as serviceProto2 } from "@esengine/network-protocols";
7
+ import { rpc as rpc2 } from "@esengine/rpc";
8
+
9
+ // src/protocol.ts
10
+ import { rpc } from "@esengine/rpc";
11
+ var gameProtocol = rpc.define({
12
+ api: {
13
+ /**
14
+ * @zh 加入房间
15
+ * @en Join room
16
+ */
17
+ join: rpc.api(),
18
+ /**
19
+ * @zh 离开房间
20
+ * @en Leave room
21
+ */
22
+ leave: rpc.api()
23
+ },
24
+ msg: {
25
+ /**
26
+ * @zh 玩家输入
27
+ * @en Player input
28
+ */
29
+ input: rpc.msg(),
30
+ /**
31
+ * @zh 状态同步
32
+ * @en State sync
33
+ */
34
+ sync: rpc.msg(),
35
+ /**
36
+ * @zh 实体生成
37
+ * @en Entity spawn
38
+ */
39
+ spawn: rpc.msg(),
40
+ /**
41
+ * @zh 实体销毁
42
+ * @en Entity despawn
43
+ */
44
+ despawn: rpc.msg()
45
+ }
46
+ });
8
47
 
9
48
  // src/tokens.ts
10
49
  import { createServiceToken } from "@esengine/ecs-framework";
@@ -17,128 +56,166 @@ var NetworkInputSystemToken = createServiceToken("networkInputSystem");
17
56
  import { Core } from "@esengine/ecs-framework";
18
57
 
19
58
  // src/services/NetworkService.ts
20
- import { WsClient } from "tsrpc-browser";
21
- import { serviceProto } from "@esengine/network-protocols";
22
- var ENetworkState = /* @__PURE__ */ (function(ENetworkState2) {
23
- ENetworkState2[ENetworkState2["Disconnected"] = 0] = "Disconnected";
24
- ENetworkState2[ENetworkState2["Connecting"] = 1] = "Connecting";
25
- ENetworkState2[ENetworkState2["Connected"] = 2] = "Connected";
26
- return ENetworkState2;
59
+ import { RpcClient } from "@esengine/rpc/client";
60
+ var NetworkState = /* @__PURE__ */ (function(NetworkState2) {
61
+ NetworkState2[NetworkState2["Disconnected"] = 0] = "Disconnected";
62
+ NetworkState2[NetworkState2["Connecting"] = 1] = "Connecting";
63
+ NetworkState2[NetworkState2["Connected"] = 2] = "Connected";
64
+ return NetworkState2;
27
65
  })({});
28
- function createClient(serverUrl) {
29
- return new WsClient(serviceProto, {
30
- server: serverUrl,
31
- json: true,
32
- logLevel: "warn"
33
- });
34
- }
35
- __name(createClient, "createClient");
36
- var _NetworkService = class _NetworkService {
37
- constructor() {
66
+ var _RpcService = class _RpcService {
67
+ constructor(_protocol) {
68
+ __publicField(this, "_protocol");
38
69
  __publicField(this, "_client", null);
39
70
  __publicField(this, "_state", 0);
40
- __publicField(this, "_clientId", 0);
41
- __publicField(this, "_roomId", "");
42
- __publicField(this, "_callbacks", {});
71
+ this._protocol = _protocol;
43
72
  }
73
+ /**
74
+ * @zh 获取连接状态
75
+ * @en Get connection state
76
+ */
44
77
  get state() {
45
78
  return this._state;
46
79
  }
47
- get clientId() {
48
- return this._clientId;
49
- }
50
- get roomId() {
51
- return this._roomId;
52
- }
80
+ /**
81
+ * @zh 是否已连接
82
+ * @en Whether connected
83
+ */
53
84
  get isConnected() {
54
85
  return this._state === 2;
55
86
  }
56
87
  /**
57
- * 设置回调
58
- * Set callbacks
88
+ * @zh 获取底层 RPC 客户端
89
+ * @en Get underlying RPC client
59
90
  */
60
- setCallbacks(callbacks) {
61
- this._callbacks = {
62
- ...this._callbacks,
63
- ...callbacks
64
- };
91
+ get client() {
92
+ return this._client;
65
93
  }
66
94
  /**
67
- * 连接到服务器
68
- * Connect to server
95
+ * @zh 连接到服务器
96
+ * @en Connect to server
69
97
  */
70
- async connect(serverUrl, playerName, roomId) {
98
+ async connect(options) {
71
99
  if (this._state !== 0) {
72
- return false;
100
+ throw new Error("Already connected or connecting");
73
101
  }
74
102
  this._state = 1;
75
- this._client = createClient(serverUrl);
76
- this._setupListeners();
77
- const connectResult = await this._client.connect();
78
- if (!connectResult.isSucc) {
79
- this._state = 0;
80
- this._callbacks.onError?.(new Error(connectResult.errMsg));
81
- return false;
82
- }
83
- const joinResult = await this._client.callApi("Join", {
84
- playerName,
85
- roomId
86
- });
87
- if (!joinResult.isSucc) {
88
- await this._client.disconnect();
103
+ try {
104
+ this._client = new RpcClient(this._protocol, options.url, {
105
+ ...options,
106
+ onConnect: /* @__PURE__ */ __name(() => {
107
+ this._state = 2;
108
+ options.onConnect?.();
109
+ }, "onConnect"),
110
+ onDisconnect: /* @__PURE__ */ __name((reason) => {
111
+ this._state = 0;
112
+ options.onDisconnect?.(reason);
113
+ }, "onDisconnect"),
114
+ onError: options.onError
115
+ });
116
+ await this._client.connect();
117
+ this._state = 2;
118
+ } catch (err) {
89
119
  this._state = 0;
90
- this._callbacks.onError?.(new Error(joinResult.err.message));
91
- return false;
120
+ this._client = null;
121
+ throw err;
92
122
  }
93
- this._clientId = joinResult.res.clientId;
94
- this._roomId = joinResult.res.roomId;
95
- this._state = 2;
96
- this._callbacks.onConnected?.(this._clientId, this._roomId);
97
- return true;
98
123
  }
99
124
  /**
100
- * 断开连接
101
- * Disconnect
125
+ * @zh 断开连接
126
+ * @en Disconnect
102
127
  */
103
- async disconnect() {
104
- if (this._client) {
105
- await this._client.disconnect();
106
- }
107
- this._state = 0;
108
- this._clientId = 0;
109
- this._roomId = "";
128
+ disconnect() {
129
+ this._client?.disconnect();
110
130
  this._client = null;
131
+ this._state = 0;
132
+ }
133
+ /**
134
+ * @zh 调用 API
135
+ * @en Call API
136
+ */
137
+ call(name, input) {
138
+ if (!this._client) {
139
+ return Promise.reject(new Error("Not connected"));
140
+ }
141
+ return this._client.call(name, input);
142
+ }
143
+ /**
144
+ * @zh 发送消息
145
+ * @en Send message
146
+ */
147
+ send(name, data) {
148
+ this._client?.send(name, data);
149
+ }
150
+ /**
151
+ * @zh 监听消息
152
+ * @en Listen to message
153
+ */
154
+ on(name, handler) {
155
+ this._client?.on(name, handler);
156
+ return this;
157
+ }
158
+ /**
159
+ * @zh 取消监听消息
160
+ * @en Remove message listener
161
+ */
162
+ off(name, handler) {
163
+ this._client?.off(name, handler);
164
+ return this;
111
165
  }
112
166
  /**
113
- * 发送输入
114
- * Send input
167
+ * @zh 监听消息(只触发一次)
168
+ * @en Listen to message (once)
169
+ */
170
+ once(name, handler) {
171
+ this._client?.once(name, handler);
172
+ return this;
173
+ }
174
+ };
175
+ __name(_RpcService, "RpcService");
176
+ var RpcService = _RpcService;
177
+ var _GameNetworkService = class _GameNetworkService extends RpcService {
178
+ constructor() {
179
+ super(gameProtocol);
180
+ }
181
+ /**
182
+ * @zh 发送玩家输入
183
+ * @en Send player input
115
184
  */
116
185
  sendInput(input) {
117
- if (!this.isConnected || !this._client) return;
118
- this._client.sendMsg("Input", {
119
- input
120
- });
186
+ this.send("input", input);
121
187
  }
122
- _setupListeners() {
123
- if (!this._client) return;
124
- this._client.listenMsg("Sync", (msg) => {
125
- this._callbacks.onSync?.(msg);
126
- });
127
- this._client.listenMsg("Spawn", (msg) => {
128
- this._callbacks.onSpawn?.(msg);
129
- });
130
- this._client.listenMsg("Despawn", (msg) => {
131
- this._callbacks.onDespawn?.(msg);
132
- });
133
- this._client.flows.postDisconnectFlow.push((v) => {
134
- this._state = 0;
135
- this._callbacks.onDisconnected?.();
136
- return v;
137
- });
188
+ /**
189
+ * @zh 监听状态同步
190
+ * @en Listen to state sync
191
+ */
192
+ onSync(handler) {
193
+ return this.on("sync", handler);
194
+ }
195
+ /**
196
+ * @zh 监听实体生成
197
+ * @en Listen to entity spawn
198
+ */
199
+ onSpawn(handler) {
200
+ return this.on("spawn", handler);
201
+ }
202
+ /**
203
+ * @zh 监听实体销毁
204
+ * @en Listen to entity despawn
205
+ */
206
+ onDespawn(handler) {
207
+ return this.on("despawn", handler);
138
208
  }
139
209
  };
140
- __name(_NetworkService, "NetworkService");
141
- var NetworkService = _NetworkService;
210
+ __name(_GameNetworkService, "GameNetworkService");
211
+ var GameNetworkService = _GameNetworkService;
212
+ function createNetworkService(protocol) {
213
+ if (protocol) {
214
+ return new RpcService(protocol);
215
+ }
216
+ return new GameNetworkService();
217
+ }
218
+ __name(createNetworkService, "createNetworkService");
142
219
 
143
220
  // src/systems/NetworkSyncSystem.ts
144
221
  import { EntitySystem, Matcher, Time } from "@esengine/ecs-framework";
@@ -379,21 +456,26 @@ NetworkTransform = _ts_decorate2([
379
456
 
380
457
  // src/systems/NetworkSyncSystem.ts
381
458
  var _NetworkSyncSystem = class _NetworkSyncSystem extends EntitySystem {
382
- constructor(networkService) {
459
+ constructor() {
383
460
  super(Matcher.all(NetworkIdentity, NetworkTransform));
384
- __publicField(this, "_networkService");
385
461
  __publicField(this, "_netIdToEntity", /* @__PURE__ */ new Map());
386
- this._networkService = networkService;
387
- }
388
- onInitialize() {
389
- this._networkService.setCallbacks({
390
- onSync: this._handleSync.bind(this)
391
- });
392
462
  }
393
463
  /**
394
- * 处理实体列表
395
- * Process entities
464
+ * @zh 处理同步消息
465
+ * @en Handle sync message
396
466
  */
467
+ handleSync(msg) {
468
+ for (const state of msg.entities) {
469
+ const entityId = this._netIdToEntity.get(state.netId);
470
+ if (entityId === void 0) continue;
471
+ const entity = this.scene?.findEntityById(entityId);
472
+ if (!entity) continue;
473
+ const transform = entity.getComponent(NetworkTransform);
474
+ if (transform && state.pos) {
475
+ transform.setTarget(state.pos.x, state.pos.y, state.rot ?? 0);
476
+ }
477
+ }
478
+ }
397
479
  process(entities) {
398
480
  const deltaTime = Time.deltaTime;
399
481
  for (const entity of entities) {
@@ -405,38 +487,26 @@ var _NetworkSyncSystem = class _NetworkSyncSystem extends EntitySystem {
405
487
  }
406
488
  }
407
489
  /**
408
- * 注册网络实体
409
- * Register network entity
490
+ * @zh 注册网络实体
491
+ * @en Register network entity
410
492
  */
411
493
  registerEntity(netId, entityId) {
412
494
  this._netIdToEntity.set(netId, entityId);
413
495
  }
414
496
  /**
415
- * 注销网络实体
416
- * Unregister network entity
497
+ * @zh 注销网络实体
498
+ * @en Unregister network entity
417
499
  */
418
500
  unregisterEntity(netId) {
419
501
  this._netIdToEntity.delete(netId);
420
502
  }
421
503
  /**
422
- * 根据网络 ID 获取实体 ID
423
- * Get entity ID by network ID
504
+ * @zh 根据网络 ID 获取实体 ID
505
+ * @en Get entity ID by network ID
424
506
  */
425
507
  getEntityId(netId) {
426
508
  return this._netIdToEntity.get(netId);
427
509
  }
428
- _handleSync(msg) {
429
- for (const state of msg.entities) {
430
- const entityId = this._netIdToEntity.get(state.netId);
431
- if (entityId === void 0) continue;
432
- const entity = this.scene?.findEntityById(entityId);
433
- if (!entity) continue;
434
- const transform = entity.getComponent(NetworkTransform);
435
- if (transform && state.pos) {
436
- transform.setTarget(state.pos.x, state.pos.y, state.rot);
437
- }
438
- }
439
- }
440
510
  _interpolate(transform, deltaTime) {
441
511
  const t = Math.min(1, transform.lerpSpeed * deltaTime);
442
512
  transform.currentX += (transform.targetX - transform.currentX) * t;
@@ -456,54 +526,49 @@ var NetworkSyncSystem = _NetworkSyncSystem;
456
526
  // src/systems/NetworkSpawnSystem.ts
457
527
  import { EntitySystem as EntitySystem2, Matcher as Matcher2 } from "@esengine/ecs-framework";
458
528
  var _NetworkSpawnSystem = class _NetworkSpawnSystem extends EntitySystem2 {
459
- constructor(networkService, syncSystem) {
529
+ constructor(syncSystem) {
460
530
  super(Matcher2.nothing());
461
- __publicField(this, "_networkService");
462
531
  __publicField(this, "_syncSystem");
463
532
  __publicField(this, "_prefabFactories", /* @__PURE__ */ new Map());
464
- this._networkService = networkService;
533
+ __publicField(this, "_localPlayerId", 0);
465
534
  this._syncSystem = syncSystem;
466
535
  }
467
- onInitialize() {
468
- this._networkService.setCallbacks({
469
- onSpawn: this._handleSpawn.bind(this),
470
- onDespawn: this._handleDespawn.bind(this)
471
- });
472
- }
473
536
  /**
474
- * 注册预制体工厂
475
- * Register prefab factory
537
+ * @zh 设置本地玩家 ID
538
+ * @en Set local player ID
476
539
  */
477
- registerPrefab(prefabType, factory) {
478
- this._prefabFactories.set(prefabType, factory);
540
+ setLocalPlayerId(id) {
541
+ this._localPlayerId = id;
479
542
  }
480
543
  /**
481
- * 注销预制体工厂
482
- * Unregister prefab factory
544
+ * @zh 处理生成消息
545
+ * @en Handle spawn message
483
546
  */
484
- unregisterPrefab(prefabType) {
485
- this._prefabFactories.delete(prefabType);
486
- }
487
- _handleSpawn(msg) {
488
- if (!this.scene) return;
547
+ handleSpawn(msg) {
548
+ if (!this.scene) return null;
489
549
  const factory = this._prefabFactories.get(msg.prefab);
490
550
  if (!factory) {
491
551
  this.logger.warn(`Unknown prefab: ${msg.prefab}`);
492
- return;
552
+ return null;
493
553
  }
494
554
  const entity = factory(this.scene, msg);
495
555
  const identity = entity.addComponent(new NetworkIdentity());
496
556
  identity.netId = msg.netId;
497
557
  identity.ownerId = msg.ownerId;
498
558
  identity.prefabType = msg.prefab;
499
- identity.bHasAuthority = msg.ownerId === this._networkService.clientId;
559
+ identity.bHasAuthority = msg.ownerId === this._localPlayerId;
500
560
  identity.bIsLocalPlayer = identity.bHasAuthority;
501
561
  const transform = entity.addComponent(new NetworkTransform());
502
- transform.setTarget(msg.pos.x, msg.pos.y, msg.rot);
562
+ transform.setTarget(msg.pos.x, msg.pos.y, msg.rot ?? 0);
503
563
  transform.snap();
504
564
  this._syncSystem.registerEntity(msg.netId, entity.id);
565
+ return entity;
505
566
  }
506
- _handleDespawn(msg) {
567
+ /**
568
+ * @zh 处理销毁消息
569
+ * @en Handle despawn message
570
+ */
571
+ handleDespawn(msg) {
507
572
  const entityId = this._syncSystem.getEntityId(msg.netId);
508
573
  if (entityId === void 0) return;
509
574
  const entity = this.scene?.findEntityById(entityId);
@@ -512,6 +577,20 @@ var _NetworkSpawnSystem = class _NetworkSpawnSystem extends EntitySystem2 {
512
577
  }
513
578
  this._syncSystem.unregisterEntity(msg.netId);
514
579
  }
580
+ /**
581
+ * @zh 注册预制体工厂
582
+ * @en Register prefab factory
583
+ */
584
+ registerPrefab(prefabType, factory) {
585
+ this._prefabFactories.set(prefabType, factory);
586
+ }
587
+ /**
588
+ * @zh 注销预制体工厂
589
+ * @en Unregister prefab factory
590
+ */
591
+ unregisterPrefab(prefabType) {
592
+ this._prefabFactories.delete(prefabType);
593
+ }
515
594
  onDestroy() {
516
595
  this._prefabFactories.clear();
517
596
  }
@@ -530,8 +609,8 @@ var _NetworkInputSystem = class _NetworkInputSystem extends EntitySystem3 {
530
609
  this._networkService = networkService;
531
610
  }
532
611
  /**
533
- * 处理输入队列
534
- * Process input queue
612
+ * @zh 处理输入队列
613
+ * @en Process input queue
535
614
  */
536
615
  process() {
537
616
  if (!this._networkService.isConnected) return;
@@ -543,8 +622,8 @@ var _NetworkInputSystem = class _NetworkInputSystem extends EntitySystem3 {
543
622
  }
544
623
  }
545
624
  /**
546
- * 添加移动输入
547
- * Add move input
625
+ * @zh 添加移动输入
626
+ * @en Add move input
548
627
  */
549
628
  addMoveInput(x, y) {
550
629
  this._inputQueue.push({
@@ -556,8 +635,8 @@ var _NetworkInputSystem = class _NetworkInputSystem extends EntitySystem3 {
556
635
  });
557
636
  }
558
637
  /**
559
- * 添加动作输入
560
- * Add action input
638
+ * @zh 添加动作输入
639
+ * @en Add action input
561
640
  */
562
641
  addActionInput(action) {
563
642
  const lastInput = this._inputQueue[this._inputQueue.length - 1];
@@ -584,104 +663,139 @@ var NetworkInputSystem = _NetworkInputSystem;
584
663
  var _NetworkPlugin = class _NetworkPlugin {
585
664
  constructor() {
586
665
  __publicField(this, "name", "@esengine/network");
587
- __publicField(this, "version", "1.0.0");
666
+ __publicField(this, "version", "2.0.0");
588
667
  __publicField(this, "_networkService");
589
668
  __publicField(this, "_syncSystem");
590
669
  __publicField(this, "_spawnSystem");
591
670
  __publicField(this, "_inputSystem");
671
+ __publicField(this, "_localPlayerId", 0);
592
672
  }
593
673
  /**
594
- * 网络服务
595
- * Network service
674
+ * @zh 网络服务
675
+ * @en Network service
596
676
  */
597
677
  get networkService() {
598
678
  return this._networkService;
599
679
  }
600
680
  /**
601
- * 同步系统
602
- * Sync system
681
+ * @zh 同步系统
682
+ * @en Sync system
603
683
  */
604
684
  get syncSystem() {
605
685
  return this._syncSystem;
606
686
  }
607
687
  /**
608
- * 生成系统
609
- * Spawn system
688
+ * @zh 生成系统
689
+ * @en Spawn system
610
690
  */
611
691
  get spawnSystem() {
612
692
  return this._spawnSystem;
613
693
  }
614
694
  /**
615
- * 输入系统
616
- * Input system
695
+ * @zh 输入系统
696
+ * @en Input system
617
697
  */
618
698
  get inputSystem() {
619
699
  return this._inputSystem;
620
700
  }
621
701
  /**
622
- * 是否已连接
623
- * Is connected
702
+ * @zh 本地玩家 ID
703
+ * @en Local player ID
704
+ */
705
+ get localPlayerId() {
706
+ return this._localPlayerId;
707
+ }
708
+ /**
709
+ * @zh 是否已连接
710
+ * @en Is connected
624
711
  */
625
712
  get isConnected() {
626
713
  return this._networkService?.isConnected ?? false;
627
714
  }
628
715
  /**
629
- * 安装插件
630
- * Install plugin
716
+ * @zh 安装插件
717
+ * @en Install plugin
631
718
  */
632
719
  install(_core, _services) {
633
- this._networkService = new NetworkService();
720
+ this._networkService = new GameNetworkService();
634
721
  const scene = Core.scene;
635
722
  if (scene) {
636
723
  this._setupSystems(scene);
637
724
  }
638
725
  }
639
726
  /**
640
- * 卸载插件
641
- * Uninstall plugin
727
+ * @zh 卸载插件
728
+ * @en Uninstall plugin
642
729
  */
643
730
  uninstall() {
644
731
  this._networkService?.disconnect();
645
732
  }
646
733
  _setupSystems(scene) {
647
- this._syncSystem = new NetworkSyncSystem(this._networkService);
648
- this._spawnSystem = new NetworkSpawnSystem(this._networkService, this._syncSystem);
734
+ this._syncSystem = new NetworkSyncSystem();
735
+ this._spawnSystem = new NetworkSpawnSystem(this._syncSystem);
649
736
  this._inputSystem = new NetworkInputSystem(this._networkService);
650
737
  scene.addSystem(this._syncSystem);
651
738
  scene.addSystem(this._spawnSystem);
652
739
  scene.addSystem(this._inputSystem);
740
+ this._setupMessageHandlers();
741
+ }
742
+ _setupMessageHandlers() {
743
+ this._networkService.onSync((data) => {
744
+ this._syncSystem.handleSync({
745
+ entities: data.entities
746
+ });
747
+ }).onSpawn((data) => {
748
+ this._spawnSystem.handleSpawn(data);
749
+ }).onDespawn((data) => {
750
+ this._spawnSystem.handleDespawn(data);
751
+ });
653
752
  }
654
753
  /**
655
- * 连接到服务器
656
- * Connect to server
754
+ * @zh 连接到服务器
755
+ * @en Connect to server
657
756
  */
658
- async connect(serverUrl, playerName, roomId) {
659
- return this._networkService.connect(serverUrl, playerName, roomId);
757
+ async connect(options) {
758
+ try {
759
+ await this._networkService.connect(options);
760
+ const result = await this._networkService.call("join", {
761
+ playerName: options.playerName,
762
+ roomId: options.roomId
763
+ });
764
+ this._localPlayerId = result.playerId;
765
+ this._spawnSystem.setLocalPlayerId(this._localPlayerId);
766
+ return true;
767
+ } catch (err) {
768
+ return false;
769
+ }
660
770
  }
661
771
  /**
662
- * 断开连接
663
- * Disconnect
772
+ * @zh 断开连接
773
+ * @en Disconnect
664
774
  */
665
775
  async disconnect() {
666
- await this._networkService.disconnect();
776
+ try {
777
+ await this._networkService.call("leave", void 0);
778
+ } catch {
779
+ }
780
+ this._networkService.disconnect();
667
781
  }
668
782
  /**
669
- * 注册预制体工厂
670
- * Register prefab factory
783
+ * @zh 注册预制体工厂
784
+ * @en Register prefab factory
671
785
  */
672
786
  registerPrefab(prefabType, factory) {
673
787
  this._spawnSystem?.registerPrefab(prefabType, factory);
674
788
  }
675
789
  /**
676
- * 发送移动输入
677
- * Send move input
790
+ * @zh 发送移动输入
791
+ * @en Send move input
678
792
  */
679
793
  sendMoveInput(x, y) {
680
794
  this._inputSystem?.addMoveInput(x, y);
681
795
  }
682
796
  /**
683
- * 发送动作输入
684
- * Send action input
797
+ * @zh 发送动作输入
798
+ * @en Send action input
685
799
  */
686
800
  sendActionInput(action) {
687
801
  this._inputSystem?.addActionInput(action);
@@ -1310,7 +1424,7 @@ var NetworkNodeDefinitions = {
1310
1424
  };
1311
1425
  export {
1312
1426
  ClientPrediction,
1313
- ENetworkState,
1427
+ GameNetworkService,
1314
1428
  GetLocalPlayerIdExecutor,
1315
1429
  GetLocalPlayerIdTemplate,
1316
1430
  GetNetworkIdExecutor,
@@ -1327,22 +1441,26 @@ export {
1327
1441
  NetworkInputSystemToken,
1328
1442
  NetworkNodeDefinitions,
1329
1443
  NetworkPlugin,
1330
- NetworkService,
1444
+ GameNetworkService as NetworkService,
1331
1445
  NetworkServiceToken,
1332
1446
  NetworkSpawnSystem,
1333
1447
  NetworkSpawnSystemToken,
1448
+ NetworkState,
1334
1449
  NetworkSyncSystem,
1335
1450
  NetworkSyncSystemToken,
1336
1451
  NetworkTransform,
1452
+ RpcService,
1337
1453
  SnapshotBuffer,
1338
1454
  TransformInterpolator,
1339
1455
  createClientPrediction,
1340
1456
  createHermiteTransformInterpolator,
1457
+ createNetworkService,
1341
1458
  createSnapshotBuffer,
1342
1459
  createTransformInterpolator,
1460
+ gameProtocol,
1343
1461
  lerp,
1344
1462
  lerpAngle,
1345
- serviceProto2 as serviceProto,
1463
+ rpc2 as rpc,
1346
1464
  smoothDamp
1347
1465
  };
1348
1466
  //# sourceMappingURL=index.js.map