@threejs-shared/protobuf 0.1.3 → 0.1.4
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/ProtoBufManager.d.ts +71 -0
- package/dist/ProtoBufManager.d.ts.map +1 -0
- package/dist/ProtoBufManager.js +266 -0
- package/dist/ProtoBufManager.js.map +1 -0
- package/dist/ProtobufPlaybackClient.d.ts +118 -0
- package/dist/ProtobufPlaybackClient.d.ts.map +1 -0
- package/dist/ProtobufPlaybackClient.js +185 -0
- package/dist/ProtobufPlaybackClient.js.map +1 -0
- package/dist/ProtobufWebSocketClient.d.ts +80 -0
- package/dist/ProtobufWebSocketClient.d.ts.map +1 -0
- package/dist/ProtobufWebSocketClient.js +94 -0
- package/dist/ProtobufWebSocketClient.js.map +1 -0
- package/dist/TimerManager.d.ts +26 -0
- package/dist/TimerManager.d.ts.map +1 -0
- package/dist/TimerManager.js +93 -0
- package/dist/TimerManager.js.map +1 -0
- package/dist/WebSocketManager.d.ts +119 -0
- package/dist/WebSocketManager.d.ts.map +1 -0
- package/dist/WebSocketManager.js +302 -0
- package/dist/WebSocketManager.js.map +1 -0
- package/{src/index.ts → dist/index.d.ts} +13 -13
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +3 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +9 -9
- package/src/ProtoBufManager.ts +0 -313
- package/src/ProtobufPlaybackClient.ts +0 -238
- package/src/ProtobufWebSocketClient.ts +0 -126
- package/src/TimerManager.ts +0 -103
- package/src/WebSocketManager.ts +0 -352
- package/src/types.ts +0 -2
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { WebSocketManager, MessageFormat } from './WebSocketManager';
|
|
2
|
+
import type { WebSocketManagerOptions, WebSocketCallbacks, ProtoBufManagerOptions } from './index';
|
|
3
|
+
/**
|
|
4
|
+
* Protobuf WebSocket 客户端配置
|
|
5
|
+
*/
|
|
6
|
+
export interface ProtobufWebSocketClientConfig {
|
|
7
|
+
/** Proto 文件路径 */
|
|
8
|
+
protoPath: string;
|
|
9
|
+
/** 消息类型名称(例如:'SimulationMonitor.SimulationMonitorMsg') */
|
|
10
|
+
messageType: string;
|
|
11
|
+
/** WebSocket URL */
|
|
12
|
+
wsUrl: string;
|
|
13
|
+
/** WebSocket 管理器选项 */
|
|
14
|
+
wsOptions?: WebSocketManagerOptions;
|
|
15
|
+
/** ProtoBuf 管理器选项 */
|
|
16
|
+
protoBufOptions?: ProtoBufManagerOptions;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Protobuf WebSocket 客户端
|
|
20
|
+
*
|
|
21
|
+
* 这是一个高级封装类,将 ProtoBufManager 和 WebSocketManager 的使用流程封装起来,
|
|
22
|
+
* 简化业务代码中的使用。业务代码只需要配置参数和定义回调函数即可。
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* const client = new ProtobufWebSocketClient({
|
|
27
|
+
* protoPath: '/proto/SimulationMonitor.proto',
|
|
28
|
+
* messageType: 'SimulationMonitor.SimulationMonitorMsg',
|
|
29
|
+
* wsUrl: 'ws://localhost:8080',
|
|
30
|
+
* wsOptions: {
|
|
31
|
+
* autoReconnect: true,
|
|
32
|
+
* reconnectDelay: 3000,
|
|
33
|
+
* },
|
|
34
|
+
* protoBufOptions: {
|
|
35
|
+
* enableLog: true, // 控制 ProtoBufManager 的日志
|
|
36
|
+
* }
|
|
37
|
+
* })
|
|
38
|
+
*
|
|
39
|
+
* await client.connect({
|
|
40
|
+
* onOpen: () => {
|
|
41
|
+
* // 连接成功后可以在这里发送初始消息
|
|
42
|
+
* client.send({ frameRate: { frameRate: 20 } })
|
|
43
|
+
* },
|
|
44
|
+
* onMessage: (data) => {
|
|
45
|
+
* console.log('Received:', data)
|
|
46
|
+
* }
|
|
47
|
+
* })
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export declare class ProtobufWebSocketClient {
|
|
51
|
+
private protoBufManager;
|
|
52
|
+
webSocketManager: WebSocketManager | null;
|
|
53
|
+
private config;
|
|
54
|
+
private protobufType;
|
|
55
|
+
constructor(config: ProtobufWebSocketClientConfig);
|
|
56
|
+
/**
|
|
57
|
+
* 连接 WebSocket(会自动加载 Proto 文件)
|
|
58
|
+
* @param callbacks 事件回调函数
|
|
59
|
+
* @returns Promise<void>
|
|
60
|
+
*/
|
|
61
|
+
connect(callbacks?: WebSocketCallbacks): Promise<void>;
|
|
62
|
+
/**
|
|
63
|
+
* 发送消息
|
|
64
|
+
* @param message 要发送的消息对象或 JSON 字符串
|
|
65
|
+
* @param format 消息格式,默认为 Protobuf 格式
|
|
66
|
+
* @throws 如果连接未建立或消息验证失败
|
|
67
|
+
*/
|
|
68
|
+
send(message: object | string, format?: MessageFormat): void;
|
|
69
|
+
/**
|
|
70
|
+
* 断开连接
|
|
71
|
+
* @param code 关闭代码
|
|
72
|
+
* @param reason 关闭原因
|
|
73
|
+
*/
|
|
74
|
+
disconnect(code?: number, reason?: string): void;
|
|
75
|
+
/**
|
|
76
|
+
* 销毁客户端,清理所有资源
|
|
77
|
+
*/
|
|
78
|
+
destroy(): void;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=ProtobufWebSocketClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProtobufWebSocketClient.d.ts","sourceRoot":"","sources":["../src/ProtobufWebSocketClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAmB,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAErF,OAAO,KAAK,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAElG;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAA;IACnB,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,sBAAsB;IACtB,SAAS,CAAC,EAAE,uBAAuB,CAAA;IACnC,qBAAqB;IACrB,eAAe,CAAC,EAAE,sBAAsB,CAAA;CACzC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,eAAe,CAAiB;IACjC,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAO;IACvD,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,YAAY,CAA4B;gBAEpC,MAAM,EAAE,6BAA6B;IAKjD;;;;OAIG;IACG,OAAO,CAAC,SAAS,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB5D;;;;;OAKG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,GAAE,aAAsC,GAAG,IAAI;IAOpF;;;;OAIG;IACH,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAKhD;;OAEG;IACH,OAAO,IAAI,IAAI;CAOhB"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { ProtoBufManager } from './ProtoBufManager';
|
|
2
|
+
import { WebSocketManager, MessageFormat } from './WebSocketManager';
|
|
3
|
+
/**
|
|
4
|
+
* Protobuf WebSocket 客户端
|
|
5
|
+
*
|
|
6
|
+
* 这是一个高级封装类,将 ProtoBufManager 和 WebSocketManager 的使用流程封装起来,
|
|
7
|
+
* 简化业务代码中的使用。业务代码只需要配置参数和定义回调函数即可。
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* const client = new ProtobufWebSocketClient({
|
|
12
|
+
* protoPath: '/proto/SimulationMonitor.proto',
|
|
13
|
+
* messageType: 'SimulationMonitor.SimulationMonitorMsg',
|
|
14
|
+
* wsUrl: 'ws://localhost:8080',
|
|
15
|
+
* wsOptions: {
|
|
16
|
+
* autoReconnect: true,
|
|
17
|
+
* reconnectDelay: 3000,
|
|
18
|
+
* },
|
|
19
|
+
* protoBufOptions: {
|
|
20
|
+
* enableLog: true, // 控制 ProtoBufManager 的日志
|
|
21
|
+
* }
|
|
22
|
+
* })
|
|
23
|
+
*
|
|
24
|
+
* await client.connect({
|
|
25
|
+
* onOpen: () => {
|
|
26
|
+
* // 连接成功后可以在这里发送初始消息
|
|
27
|
+
* client.send({ frameRate: { frameRate: 20 } })
|
|
28
|
+
* },
|
|
29
|
+
* onMessage: (data) => {
|
|
30
|
+
* console.log('Received:', data)
|
|
31
|
+
* }
|
|
32
|
+
* })
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export class ProtobufWebSocketClient {
|
|
36
|
+
constructor(config) {
|
|
37
|
+
this.webSocketManager = null;
|
|
38
|
+
this.protobufType = null;
|
|
39
|
+
this.config = config;
|
|
40
|
+
this.protoBufManager = new ProtoBufManager(config.protoBufOptions);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 连接 WebSocket(会自动加载 Proto 文件)
|
|
44
|
+
* @param callbacks 事件回调函数
|
|
45
|
+
* @returns Promise<void>
|
|
46
|
+
*/
|
|
47
|
+
async connect(callbacks) {
|
|
48
|
+
try {
|
|
49
|
+
// 加载 Proto 文件
|
|
50
|
+
this.protobufType = await this.protoBufManager.loadProto(this.config.protoPath, this.config.messageType);
|
|
51
|
+
// 创建 WebSocket 管理器
|
|
52
|
+
this.webSocketManager = new WebSocketManager(this.config.wsUrl, this.protobufType, this.config.wsOptions);
|
|
53
|
+
// 连接 WebSocket
|
|
54
|
+
this.webSocketManager.connect(callbacks);
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
console.error('Protobuf WebSocket 连接失败:', error);
|
|
58
|
+
throw error;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* 发送消息
|
|
63
|
+
* @param message 要发送的消息对象或 JSON 字符串
|
|
64
|
+
* @param format 消息格式,默认为 Protobuf 格式
|
|
65
|
+
* @throws 如果连接未建立或消息验证失败
|
|
66
|
+
*/
|
|
67
|
+
send(message, format = MessageFormat.PROTOBUF) {
|
|
68
|
+
if (!this.webSocketManager) {
|
|
69
|
+
throw new Error('WebSocket is not connected. Please call connect() first.');
|
|
70
|
+
}
|
|
71
|
+
this.webSocketManager.send(message, format);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* 断开连接
|
|
75
|
+
* @param code 关闭代码
|
|
76
|
+
* @param reason 关闭原因
|
|
77
|
+
*/
|
|
78
|
+
disconnect(code, reason) {
|
|
79
|
+
if (this.webSocketManager) {
|
|
80
|
+
this.webSocketManager.disconnect(code, reason);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* 销毁客户端,清理所有资源
|
|
85
|
+
*/
|
|
86
|
+
destroy() {
|
|
87
|
+
if (this.webSocketManager) {
|
|
88
|
+
this.webSocketManager.destroy();
|
|
89
|
+
this.webSocketManager = null;
|
|
90
|
+
}
|
|
91
|
+
this.protobufType = null;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=ProtobufWebSocketClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProtobufWebSocketClient.js","sourceRoot":"","sources":["../src/ProtobufWebSocketClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAmB,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAoBrF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,OAAO,uBAAuB;IAMlC,YAAY,MAAqC;QAJ1C,qBAAgB,GAA4B,IAAI,CAAA;QAE/C,iBAAY,GAAwB,IAAI,CAAA;QAG9C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;IACpE,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,SAA8B;QAC1C,IAAI,CAAC;YACH,cAAc;YACd,IAAI,CAAC,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,CACtD,IAAI,CAAC,MAAM,CAAC,SAAS,EACrB,IAAI,CAAC,MAAM,CAAC,WAAW,CACxB,CAAA;YAED,mBAAmB;YACnB,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAC1C,IAAI,CAAC,MAAM,CAAC,KAAK,EACjB,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,MAAM,CAAC,SAAS,CACtB,CAAA;YAED,eAAe;YACf,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAA;YAChD,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;IACD;;;;;OAKG;IACH,IAAI,CAAC,OAAwB,EAAE,SAAwB,aAAa,CAAC,QAAQ;QAC3E,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;QAC7E,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAC7C,CAAC;IAED;;;;OAIG;IACH,UAAU,CAAC,IAAa,EAAE,MAAe;QACrC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC5B,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAC9C,CAAC;IACL,CAAC;IACD;;OAEG;IACH,OAAO;QACL,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAA;YAC/B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAA;QAC9B,CAAC;QACD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;IAC1B,CAAC;CACF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
type FrameDataCallback = (frameData: Array<{
|
|
2
|
+
id: number;
|
|
3
|
+
value: number;
|
|
4
|
+
}>) => void;
|
|
5
|
+
type Callback = (args?: any) => void;
|
|
6
|
+
export declare class TimerManager {
|
|
7
|
+
private dataArray;
|
|
8
|
+
private frameSize;
|
|
9
|
+
private interval;
|
|
10
|
+
private currentIndex;
|
|
11
|
+
private timer;
|
|
12
|
+
isPaused: Boolean;
|
|
13
|
+
private onFrame;
|
|
14
|
+
private onComplete;
|
|
15
|
+
private onProcess;
|
|
16
|
+
constructor(dataArray?: never[], interval?: number, frameSize?: number);
|
|
17
|
+
connect(onFrame: FrameDataCallback, onProcess?: Callback, onComplete?: Callback): void;
|
|
18
|
+
start(): void;
|
|
19
|
+
startFrom(startSecond?: number): void;
|
|
20
|
+
stop(): void;
|
|
21
|
+
reset(): void;
|
|
22
|
+
pause(): void;
|
|
23
|
+
resume(): void;
|
|
24
|
+
}
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=TimerManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimerManager.d.ts","sourceRoot":"","sources":["../src/TimerManager.ts"],"names":[],"mappings":"AAAA,KAAK,iBAAiB,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,KAAK,IAAI,CAAA;AAClF,KAAK,QAAQ,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAA;AAEpC,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAsC;IACvD,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,KAAK,CAAuC;IACpD,QAAQ,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,SAAS,CAAU;gBAEf,SAAS,UAAK,EAAE,QAAQ,SAAK,EAAE,SAAS,SAAI;IAkBjD,OAAO,CAAC,OAAO,EAAE,iBAAiB,EAAE,SAAS,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,QAAQ,GAAG,IAAI;IAUtF,KAAK,IAAI,IAAI;IAmBb,SAAS,CAAC,WAAW,GAAE,MAAU;IAMjC,IAAI,IAAI,IAAI;IASZ,KAAK,IAAI,IAAI;IAQb,KAAK,IAAI,IAAI;IAUb,MAAM,IAAI,IAAI;CAQtB"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
export class TimerManager {
|
|
2
|
+
constructor(dataArray = [], interval = 50, frameSize = 1) {
|
|
3
|
+
this.dataArray = dataArray;
|
|
4
|
+
this.frameSize = frameSize;
|
|
5
|
+
this.interval = interval;
|
|
6
|
+
this.currentIndex = 0;
|
|
7
|
+
this.timer = null;
|
|
8
|
+
this.isPaused = false;
|
|
9
|
+
this.onFrame = () => {
|
|
10
|
+
console.log('Frame updated');
|
|
11
|
+
};
|
|
12
|
+
this.onComplete = () => {
|
|
13
|
+
console.log('Timer complete');
|
|
14
|
+
};
|
|
15
|
+
this.onProcess = (args) => {
|
|
16
|
+
console.log('Timer process', args);
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
// 开始模拟 WebSocket 数据发送
|
|
20
|
+
connect(onFrame, onProcess, onComplete) {
|
|
21
|
+
this.onFrame = onFrame || this.onFrame;
|
|
22
|
+
this.onProcess = onProcess || this.onProcess;
|
|
23
|
+
this.onComplete = onComplete || this.onComplete;
|
|
24
|
+
if (this.timer) {
|
|
25
|
+
console.warn('Simulation is already running.');
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
this.start();
|
|
29
|
+
}
|
|
30
|
+
start() {
|
|
31
|
+
const processFrame = () => {
|
|
32
|
+
var _a;
|
|
33
|
+
if (this.isPaused)
|
|
34
|
+
return; // 如果暂停,跳过处理
|
|
35
|
+
if (this.currentIndex >= this.dataArray.length) {
|
|
36
|
+
this.stop(); // 停止定时器
|
|
37
|
+
if (this.onComplete)
|
|
38
|
+
this.onComplete(); // 调用完成回调
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const frameData = this.dataArray.slice(this.currentIndex, this.currentIndex + this.frameSize); // 获取当前帧数据
|
|
42
|
+
this.currentIndex += this.frameSize; // 更新索引
|
|
43
|
+
this.onFrame(frameData[0]); // 调用帧数据处理回调
|
|
44
|
+
const currentSecond = Math.floor(this.currentIndex / this.interval);
|
|
45
|
+
(_a = this.onProcess) === null || _a === void 0 ? void 0 : _a.call(this, currentSecond);
|
|
46
|
+
};
|
|
47
|
+
this.timer && clearInterval(this.timer);
|
|
48
|
+
this.timer = setInterval(processFrame, 1000 / this.interval);
|
|
49
|
+
}
|
|
50
|
+
startFrom(startSecond = 0) {
|
|
51
|
+
this.currentIndex = startSecond * this.interval;
|
|
52
|
+
// this.isPaused = false
|
|
53
|
+
this.start();
|
|
54
|
+
}
|
|
55
|
+
// 停止模拟
|
|
56
|
+
stop() {
|
|
57
|
+
if (this.timer) {
|
|
58
|
+
clearInterval(this.timer);
|
|
59
|
+
this.timer = null;
|
|
60
|
+
this.isPaused = true;
|
|
61
|
+
console.log('Simulation stopped.');
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// 重置模拟器(可重新开始)
|
|
65
|
+
reset() {
|
|
66
|
+
this.stop();
|
|
67
|
+
this.currentIndex = 0;
|
|
68
|
+
this.isPaused = false;
|
|
69
|
+
this.start();
|
|
70
|
+
console.log('Simulation reset.');
|
|
71
|
+
}
|
|
72
|
+
// 暂停模拟
|
|
73
|
+
pause() {
|
|
74
|
+
if (this.timer) {
|
|
75
|
+
this.isPaused = true; // 设置暂停状态
|
|
76
|
+
// console.log('Simulation paused.')
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
console.warn('Simulation is not running. Cannot pause.');
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// 继续模拟
|
|
83
|
+
resume() {
|
|
84
|
+
if (this.timer && this.isPaused) {
|
|
85
|
+
this.isPaused = false; // 恢复非暂停状态
|
|
86
|
+
// console.log('Simulation resumed.')
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
console.warn('Simulation is not running or already resumed.');
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=TimerManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimerManager.js","sourceRoot":"","sources":["../src/TimerManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import type { ProtobufType } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* WebSocket 连接状态
|
|
4
|
+
*/
|
|
5
|
+
export declare enum WebSocketStatus {
|
|
6
|
+
CONNECTING = "CONNECTING",
|
|
7
|
+
CONNECTED = "CONNECTED",
|
|
8
|
+
DISCONNECTING = "DISCONNECTING",
|
|
9
|
+
DISCONNECTED = "DISCONNECTED",
|
|
10
|
+
ERROR = "ERROR"
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* 消息发送格式
|
|
14
|
+
*/
|
|
15
|
+
export declare enum MessageFormat {
|
|
16
|
+
/** JSON 格式 */
|
|
17
|
+
JSON = "JSON",
|
|
18
|
+
/** Protobuf 二进制格式 */
|
|
19
|
+
PROTOBUF = "PROTOBUF",
|
|
20
|
+
/** 原始字符串格式 */
|
|
21
|
+
STRING = "STRING"
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* WebSocket 管理器配置选项
|
|
25
|
+
*/
|
|
26
|
+
export interface WebSocketManagerOptions {
|
|
27
|
+
/** 是否启用自动重连 */
|
|
28
|
+
autoReconnect?: boolean;
|
|
29
|
+
/** 重连延迟时间(毫秒) */
|
|
30
|
+
reconnectDelay?: number;
|
|
31
|
+
/** 最大重连次数 */
|
|
32
|
+
maxReconnectAttempts?: number;
|
|
33
|
+
/** 是否启用日志 */
|
|
34
|
+
enableLog?: boolean;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* WebSocket 事件回调
|
|
38
|
+
*/
|
|
39
|
+
export interface WebSocketCallbacks {
|
|
40
|
+
/** 连接打开时的回调 */
|
|
41
|
+
onOpen?: () => void;
|
|
42
|
+
/** 接收到消息时的回调 */
|
|
43
|
+
onMessage?: (data: any) => void;
|
|
44
|
+
/** 连接错误时的回调 */
|
|
45
|
+
onError?: (error: Event) => void;
|
|
46
|
+
/** 连接关闭时的回调 */
|
|
47
|
+
onClose?: (event: CloseEvent) => void;
|
|
48
|
+
/** 重连时的回调 */
|
|
49
|
+
onReconnect?: (attempt: number) => void;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* WebSocket 管理器,用于管理基于 Protobuf 的 WebSocket 连接
|
|
53
|
+
*/
|
|
54
|
+
export declare class WebSocketManager {
|
|
55
|
+
private socket;
|
|
56
|
+
private MessagePb;
|
|
57
|
+
private wsUrl;
|
|
58
|
+
private status;
|
|
59
|
+
private reconnectAttempts;
|
|
60
|
+
private reconnectTimer;
|
|
61
|
+
private options;
|
|
62
|
+
private callbacks;
|
|
63
|
+
constructor(wsUrl: string, protobufType: ProtobufType, options?: WebSocketManagerOptions);
|
|
64
|
+
/**
|
|
65
|
+
* 连接 WebSocket
|
|
66
|
+
* @param callbacks 事件回调
|
|
67
|
+
*/
|
|
68
|
+
connect(callbacks?: WebSocketCallbacks): void;
|
|
69
|
+
/**
|
|
70
|
+
* 设置事件监听器
|
|
71
|
+
*/
|
|
72
|
+
private setupEventListeners;
|
|
73
|
+
/**
|
|
74
|
+
* 发送消息
|
|
75
|
+
* @param message 要发送的消息对象或字符串
|
|
76
|
+
* @param format 消息格式,默认为 Protobuf 格式
|
|
77
|
+
* @throws 如果连接未建立或消息验证失败
|
|
78
|
+
*/
|
|
79
|
+
send(message: object | string, format?: MessageFormat): void;
|
|
80
|
+
/**
|
|
81
|
+
* 断开连接
|
|
82
|
+
* @param code 关闭代码
|
|
83
|
+
* @param reason 关闭原因
|
|
84
|
+
*/
|
|
85
|
+
disconnect(code?: number, reason?: string): void;
|
|
86
|
+
/**
|
|
87
|
+
* 获取当前连接状态
|
|
88
|
+
*/
|
|
89
|
+
getStatus(): WebSocketStatus;
|
|
90
|
+
/**
|
|
91
|
+
* 检查是否已连接
|
|
92
|
+
*/
|
|
93
|
+
isConnected(): boolean;
|
|
94
|
+
/**
|
|
95
|
+
* 设置 Protobuf 类型
|
|
96
|
+
*/
|
|
97
|
+
setProtobufType(protobufType: ProtobufType): void;
|
|
98
|
+
/**
|
|
99
|
+
* 更新回调函数
|
|
100
|
+
*/
|
|
101
|
+
updateCallbacks(callbacks: WebSocketCallbacks): void;
|
|
102
|
+
/**
|
|
103
|
+
* 计划重连
|
|
104
|
+
*/
|
|
105
|
+
private scheduleReconnect;
|
|
106
|
+
/**
|
|
107
|
+
* 清理资源
|
|
108
|
+
*/
|
|
109
|
+
private cleanup;
|
|
110
|
+
/**
|
|
111
|
+
* 日志输出
|
|
112
|
+
*/
|
|
113
|
+
private log;
|
|
114
|
+
/**
|
|
115
|
+
* 销毁实例,清理所有资源
|
|
116
|
+
*/
|
|
117
|
+
destroy(): void;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=WebSocketManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebSocketManager.d.ts","sourceRoot":"","sources":["../src/WebSocketManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAE3C;;GAEG;AACH,oBAAY,eAAe;IACzB,UAAU,eAAe;IACzB,SAAS,cAAc;IACvB,aAAa,kBAAkB;IAC/B,YAAY,iBAAiB;IAC7B,KAAK,UAAU;CAChB;AAED;;GAEG;AACH,oBAAY,aAAa;IACvB,cAAc;IACd,IAAI,SAAS;IACb,qBAAqB;IACrB,QAAQ,aAAa;IACrB,cAAc;IACd,MAAM,WAAW;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,eAAe;IACf,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,iBAAiB;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,aAAa;IACb,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,aAAa;IACb,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,eAAe;IACf,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IACnB,gBAAgB;IAChB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAA;IAC/B,eAAe;IACf,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAChC,eAAe;IACf,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAA;IACrC,aAAa;IACb,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CACxC;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,MAAM,CAAgD;IAC9D,OAAO,CAAC,iBAAiB,CAAI;IAC7B,OAAO,CAAC,cAAc,CAA6C;IACnE,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,SAAS,CAAyB;gBAE9B,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,uBAAuB;IAWxF;;;OAGG;IACH,OAAO,CAAC,SAAS,CAAC,EAAE,kBAAkB,GAAG,IAAI;IAyB7C;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAuD3B;;;;;OAKG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,GAAE,aAAsC,GAAG,IAAI;IAiEpF;;;;OAIG;IACH,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAShD;;OAEG;IACH,SAAS,IAAI,eAAe;IAI5B;;OAEG;IACH,WAAW,IAAI,OAAO;IAKtB;;OAEG;IACH,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI;IAIjD;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,kBAAkB,GAAG,IAAI;IAIpD;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAwBzB;;OAEG;IACH,OAAO,CAAC,OAAO;IAuBf;;OAEG;IACH,OAAO,CAAC,GAAG;IAMX;;OAEG;IACH,OAAO,IAAI,IAAI;CAMhB"}
|