@robdobsn/raftjs 1.1.1 → 1.3.2
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/README.md +2 -0
- package/dist/{RaftAttributeHandler.js → react-native/RaftAttributeHandler.js} +1 -1
- package/dist/react-native/RaftAttributeHandler.js.map +1 -0
- package/dist/react-native/RaftChannel.js.map +1 -0
- package/dist/react-native/RaftChannelBLE.native.d.ts +93 -0
- package/dist/react-native/RaftChannelBLE.native.js +455 -0
- package/dist/react-native/RaftChannelBLE.native.js.map +1 -0
- package/dist/{RaftChannelWebBLE.d.ts → react-native/RaftChannelBLE.web.d.ts} +3 -2
- package/dist/{RaftChannelWebBLE.js → react-native/RaftChannelBLE.web.js} +48 -28
- package/dist/react-native/RaftChannelBLE.web.js.map +1 -0
- package/dist/react-native/RaftChannelBLEFactory.d.ts +10 -0
- package/dist/react-native/RaftChannelBLEFactory.js +17 -0
- package/dist/react-native/RaftChannelBLEFactory.js.map +1 -0
- package/dist/react-native/RaftChannelBLEScanner.native.d.ts +18 -0
- package/dist/react-native/RaftChannelBLEScanner.native.js +146 -0
- package/dist/react-native/RaftChannelBLEScanner.native.js.map +1 -0
- package/dist/{RaftChannelWebSerial.js → react-native/RaftChannelWebSerial.js} +3 -2
- package/dist/react-native/RaftChannelWebSerial.js.map +1 -0
- package/dist/react-native/RaftChannelWebSocket.js.map +1 -0
- package/dist/react-native/RaftCommsStats.js.map +1 -0
- package/dist/{RaftConnEvents.d.ts → react-native/RaftConnEvents.d.ts} +10 -2
- package/dist/{RaftConnEvents.js → react-native/RaftConnEvents.js} +10 -0
- package/dist/react-native/RaftConnEvents.js.map +1 -0
- package/dist/{RaftConnector.d.ts → react-native/RaftConnector.d.ts} +6 -3
- package/dist/{RaftConnector.js → react-native/RaftConnector.js} +75 -74
- package/dist/react-native/RaftConnector.js.map +1 -0
- package/dist/react-native/RaftCustomAttrHandler.js.map +1 -0
- package/dist/{RaftDeviceInfo.d.ts → react-native/RaftDeviceInfo.d.ts} +5 -10
- package/dist/react-native/RaftDeviceInfo.js.map +1 -0
- package/dist/{RaftDeviceManager.d.ts → react-native/RaftDeviceManager.d.ts} +14 -16
- package/dist/{RaftDeviceManager.js → react-native/RaftDeviceManager.js} +116 -213
- package/dist/react-native/RaftDeviceManager.js.map +1 -0
- package/dist/react-native/RaftDeviceMgrIF.d.ts +12 -0
- package/dist/react-native/RaftDeviceMgrIF.js +11 -0
- package/dist/react-native/RaftDeviceMgrIF.js.map +1 -0
- package/dist/react-native/RaftDeviceMsg.js.map +1 -0
- package/dist/{RaftDeviceStates.d.ts → react-native/RaftDeviceStates.d.ts} +1 -1
- package/dist/react-native/RaftDeviceStates.js.map +1 -0
- package/dist/react-native/RaftFileHandler.js.map +1 -0
- package/dist/react-native/RaftLog.js.map +1 -0
- package/dist/{RaftMiniHDLC.js → react-native/RaftMiniHDLC.js} +1 -1
- package/dist/react-native/RaftMiniHDLC.js.map +1 -0
- package/dist/{RaftMsgHandler.js → react-native/RaftMsgHandler.js} +2 -2
- package/dist/react-native/RaftMsgHandler.js.map +1 -0
- package/dist/react-native/RaftMsgTrackInfo.js.map +1 -0
- package/dist/react-native/RaftProtocolDefs.js.map +1 -0
- package/dist/react-native/RaftStreamHandler.js.map +1 -0
- package/dist/{RaftSystemType.d.ts → react-native/RaftSystemType.d.ts} +4 -0
- package/dist/{RaftSystemType.js.map → react-native/RaftSystemType.js.map} +1 -1
- package/dist/react-native/RaftSystemUtils.js.map +1 -0
- package/dist/{RaftTypes.d.ts → react-native/RaftTypes.d.ts} +11 -0
- package/dist/{RaftTypes.js → react-native/RaftTypes.js} +34 -1
- package/dist/react-native/RaftTypes.js.map +1 -0
- package/dist/react-native/RaftUpdateEvents.js.map +1 -0
- package/dist/react-native/RaftUpdateManager.js.map +1 -0
- package/dist/{RaftUtils.js → react-native/RaftUtils.js} +1 -1
- package/dist/react-native/RaftUtils.js.map +1 -0
- package/dist/react-native/RaftWifiTypes.js.map +1 -0
- package/dist/react-native/main.d.ts +21 -0
- package/dist/{main.js → react-native/main.js} +7 -3
- package/dist/react-native/main.js.map +1 -0
- package/dist/web/RaftAttributeHandler.d.ts +12 -0
- package/dist/web/RaftAttributeHandler.js +241 -0
- package/dist/web/RaftAttributeHandler.js.map +1 -0
- package/dist/web/RaftChannel.d.ts +18 -0
- package/dist/web/RaftChannel.js +12 -0
- package/dist/web/RaftChannel.js.map +1 -0
- package/dist/web/RaftChannelBLE.web.d.ts +39 -0
- package/dist/web/RaftChannelBLE.web.js +294 -0
- package/dist/web/RaftChannelBLE.web.js.map +1 -0
- package/dist/web/RaftChannelBLEFactory.d.ts +10 -0
- package/dist/web/RaftChannelBLEFactory.js +17 -0
- package/dist/web/RaftChannelBLEFactory.js.map +1 -0
- package/dist/web/RaftChannelWebSerial.d.ts +37 -0
- package/dist/web/RaftChannelWebSerial.js +320 -0
- package/dist/web/RaftChannelWebSerial.js.map +1 -0
- package/dist/web/RaftChannelWebSocket.d.ts +28 -0
- package/dist/web/RaftChannelWebSocket.js +197 -0
- package/dist/web/RaftChannelWebSocket.js.map +1 -0
- package/dist/web/RaftCommsStats.d.ts +39 -0
- package/dist/web/RaftCommsStats.js +128 -0
- package/dist/web/RaftCommsStats.js.map +1 -0
- package/dist/web/RaftConnEvents.d.ts +39 -0
- package/dist/web/RaftConnEvents.js +54 -0
- package/dist/web/RaftConnEvents.js.map +1 -0
- package/dist/web/RaftConnector.d.ts +245 -0
- package/dist/web/RaftConnector.js +614 -0
- package/dist/web/RaftConnector.js.map +1 -0
- package/dist/web/RaftCustomAttrHandler.d.ts +4 -0
- package/dist/web/RaftCustomAttrHandler.js +50 -0
- package/dist/web/RaftCustomAttrHandler.js.map +1 -0
- package/dist/web/RaftDeviceInfo.d.ts +59 -0
- package/dist/web/RaftDeviceInfo.js +36 -0
- package/dist/web/RaftDeviceInfo.js.map +1 -0
- package/dist/web/RaftDeviceManager.d.ts +35 -0
- package/dist/web/RaftDeviceManager.js +353 -0
- package/dist/web/RaftDeviceManager.js.map +1 -0
- package/dist/web/RaftDeviceMgrIF.d.ts +12 -0
- package/dist/web/RaftDeviceMgrIF.js +11 -0
- package/dist/web/RaftDeviceMgrIF.js.map +1 -0
- package/dist/web/RaftDeviceMsg.d.ts +9 -0
- package/dist/web/RaftDeviceMsg.js +11 -0
- package/dist/web/RaftDeviceMsg.js.map +1 -0
- package/dist/web/RaftDeviceStates.d.ts +33 -0
- package/dist/web/RaftDeviceStates.js +60 -0
- package/dist/web/RaftDeviceStates.js.map +1 -0
- package/dist/web/RaftFileHandler.d.ts +52 -0
- package/dist/web/RaftFileHandler.js +502 -0
- package/dist/web/RaftFileHandler.js.map +1 -0
- package/dist/web/RaftLog.d.ts +22 -0
- package/dist/web/RaftLog.js +63 -0
- package/dist/web/RaftLog.js.map +1 -0
- package/dist/web/RaftMiniHDLC.d.ts +18 -0
- package/dist/web/RaftMiniHDLC.js +383 -0
- package/dist/web/RaftMiniHDLC.js.map +1 -0
- package/dist/web/RaftMsgHandler.d.ts +57 -0
- package/dist/web/RaftMsgHandler.js +480 -0
- package/dist/web/RaftMsgHandler.js.map +1 -0
- package/dist/web/RaftMsgTrackInfo.d.ts +17 -0
- package/dist/web/RaftMsgTrackInfo.js +42 -0
- package/dist/web/RaftMsgTrackInfo.js.map +1 -0
- package/dist/web/RaftProtocolDefs.d.ts +30 -0
- package/dist/web/RaftProtocolDefs.js +48 -0
- package/dist/web/RaftProtocolDefs.js.map +1 -0
- package/dist/web/RaftStreamHandler.d.ts +38 -0
- package/dist/web/RaftStreamHandler.js +257 -0
- package/dist/web/RaftStreamHandler.js.map +1 -0
- package/dist/web/RaftSystemType.d.ts +25 -0
- package/dist/web/RaftSystemType.js +3 -0
- package/dist/web/RaftSystemType.js.map +1 -0
- package/dist/web/RaftSystemUtils.d.ts +136 -0
- package/dist/web/RaftSystemUtils.js +410 -0
- package/dist/web/RaftSystemUtils.js.map +1 -0
- package/dist/web/RaftTypes.d.ts +195 -0
- package/dist/web/RaftTypes.js +190 -0
- package/dist/web/RaftTypes.js.map +1 -0
- package/dist/web/RaftUpdateEvents.d.ts +33 -0
- package/dist/web/RaftUpdateEvents.js +46 -0
- package/dist/web/RaftUpdateEvents.js.map +1 -0
- package/dist/web/RaftUpdateManager.d.ts +61 -0
- package/dist/web/RaftUpdateManager.js +618 -0
- package/dist/web/RaftUpdateManager.js.map +1 -0
- package/dist/web/RaftUtils.d.ts +125 -0
- package/dist/web/RaftUtils.js +454 -0
- package/dist/web/RaftUtils.js.map +1 -0
- package/dist/web/RaftWifiTypes.d.ts +23 -0
- package/dist/web/RaftWifiTypes.js +43 -0
- package/dist/web/RaftWifiTypes.js.map +1 -0
- package/dist/{main.d.ts → web/main.d.ts} +4 -1
- package/dist/web/main.js +46 -0
- package/dist/web/main.js.map +1 -0
- package/examples/dashboard/package.json +4 -0
- package/examples/dashboard/src/CommandPanel.tsx +147 -0
- package/examples/dashboard/src/ConnManager.ts +11 -12
- package/examples/dashboard/src/DeviceActionsForm.tsx +133 -0
- package/examples/dashboard/src/DeviceAttrsForm.tsx +49 -0
- package/examples/dashboard/src/DeviceLineChart.tsx +139 -0
- package/examples/dashboard/src/DevicePanel.tsx +135 -0
- package/examples/dashboard/src/DevicesPanel.tsx +57 -0
- package/examples/dashboard/src/DispLedGrid.tsx +110 -0
- package/examples/dashboard/src/DispOneLed.tsx +20 -0
- package/examples/dashboard/src/Main.tsx +53 -47
- package/examples/dashboard/src/{StatusScreen.tsx → StatusPanel.tsx} +13 -14
- package/examples/dashboard/src/SystemTypeCog/CogStateInfo.ts +135 -122
- package/examples/dashboard/src/SystemTypeCog/SystemTypeCog.ts +15 -8
- package/examples/dashboard/src/SystemTypeMarty/RICCommsStats.ts +0 -0
- package/examples/dashboard/src/SystemTypeMarty/RICStateInfo.ts +47 -1
- package/examples/dashboard/src/SystemTypeMarty/SystemTypeMarty.ts +4 -1
- package/examples/dashboard/src/styles.css +274 -10
- package/package.json +57 -48
- package/src/RaftAttributeHandler.ts +1 -1
- package/src/RaftChannelBLE.native.ts +583 -0
- package/src/{RaftChannelWebBLE.ts → RaftChannelBLE.web.ts} +60 -40
- package/src/RaftChannelBLEFactory.ts +13 -0
- package/src/RaftChannelBLEScanner.native.ts +190 -0
- package/src/RaftChannelWebSerial.ts +1 -0
- package/src/RaftConnEvents.ts +14 -2
- package/src/RaftConnector.ts +80 -88
- package/src/RaftDeviceInfo.ts +6 -12
- package/src/RaftDeviceManager.ts +139 -245
- package/src/RaftDeviceMgrIF.ts +28 -0
- package/src/RaftDeviceStates.ts +1 -2
- package/src/RaftMiniHDLC.ts +1 -1
- package/src/RaftMsgHandler.ts +2 -2
- package/src/RaftSystemType.ts +4 -0
- package/src/RaftTypes.ts +48 -17
- package/src/RaftUtils.ts +1 -1
- package/src/main.ts +8 -1
- package/tsconfig.json +5 -2
- package/tsconfig.react-native.json +29 -0
- package/dist/RaftAttributeHandler.js.map +0 -1
- package/dist/RaftChannel.js.map +0 -1
- package/dist/RaftChannelWebBLE.js.map +0 -1
- package/dist/RaftChannelWebSerial.js.map +0 -1
- package/dist/RaftChannelWebSocket.js.map +0 -1
- package/dist/RaftCommsStats.js.map +0 -1
- package/dist/RaftConnEvents.js.map +0 -1
- package/dist/RaftConnector.js.map +0 -1
- package/dist/RaftCustomAttrHandler.js.map +0 -1
- package/dist/RaftDeviceInfo.js.map +0 -1
- package/dist/RaftDeviceManager.js.map +0 -1
- package/dist/RaftDeviceMsg.js.map +0 -1
- package/dist/RaftDeviceStates.js.map +0 -1
- package/dist/RaftFileHandler.js.map +0 -1
- package/dist/RaftLog.js.map +0 -1
- package/dist/RaftMiniHDLC.js.map +0 -1
- package/dist/RaftMsgHandler.js.map +0 -1
- package/dist/RaftMsgTrackInfo.js.map +0 -1
- package/dist/RaftProtocolDefs.js.map +0 -1
- package/dist/RaftStreamHandler.js.map +0 -1
- package/dist/RaftSystemUtils.js.map +0 -1
- package/dist/RaftTypes.js.map +0 -1
- package/dist/RaftUpdateEvents.js.map +0 -1
- package/dist/RaftUpdateManager.js.map +0 -1
- package/dist/RaftUtils.js.map +0 -1
- package/dist/RaftWifiTypes.js.map +0 -1
- package/dist/TestDataGen.d.ts +0 -7
- package/dist/TestDataGen.js +0 -133
- package/dist/TestDataGen.js.map +0 -1
- package/dist/main.js.map +0 -1
- package/src/TestDataGen.ts +0 -157
- /package/dist/{RaftAttributeHandler.d.ts → react-native/RaftAttributeHandler.d.ts} +0 -0
- /package/dist/{RaftChannel.d.ts → react-native/RaftChannel.d.ts} +0 -0
- /package/dist/{RaftChannel.js → react-native/RaftChannel.js} +0 -0
- /package/dist/{RaftChannelWebSerial.d.ts → react-native/RaftChannelWebSerial.d.ts} +0 -0
- /package/dist/{RaftChannelWebSocket.d.ts → react-native/RaftChannelWebSocket.d.ts} +0 -0
- /package/dist/{RaftChannelWebSocket.js → react-native/RaftChannelWebSocket.js} +0 -0
- /package/dist/{RaftCommsStats.d.ts → react-native/RaftCommsStats.d.ts} +0 -0
- /package/dist/{RaftCommsStats.js → react-native/RaftCommsStats.js} +0 -0
- /package/dist/{RaftCustomAttrHandler.d.ts → react-native/RaftCustomAttrHandler.d.ts} +0 -0
- /package/dist/{RaftCustomAttrHandler.js → react-native/RaftCustomAttrHandler.js} +0 -0
- /package/dist/{RaftDeviceInfo.js → react-native/RaftDeviceInfo.js} +0 -0
- /package/dist/{RaftDeviceMsg.d.ts → react-native/RaftDeviceMsg.d.ts} +0 -0
- /package/dist/{RaftDeviceMsg.js → react-native/RaftDeviceMsg.js} +0 -0
- /package/dist/{RaftDeviceStates.js → react-native/RaftDeviceStates.js} +0 -0
- /package/dist/{RaftFileHandler.d.ts → react-native/RaftFileHandler.d.ts} +0 -0
- /package/dist/{RaftFileHandler.js → react-native/RaftFileHandler.js} +0 -0
- /package/dist/{RaftLog.d.ts → react-native/RaftLog.d.ts} +0 -0
- /package/dist/{RaftLog.js → react-native/RaftLog.js} +0 -0
- /package/dist/{RaftMiniHDLC.d.ts → react-native/RaftMiniHDLC.d.ts} +0 -0
- /package/dist/{RaftMsgHandler.d.ts → react-native/RaftMsgHandler.d.ts} +0 -0
- /package/dist/{RaftMsgTrackInfo.d.ts → react-native/RaftMsgTrackInfo.d.ts} +0 -0
- /package/dist/{RaftMsgTrackInfo.js → react-native/RaftMsgTrackInfo.js} +0 -0
- /package/dist/{RaftProtocolDefs.d.ts → react-native/RaftProtocolDefs.d.ts} +0 -0
- /package/dist/{RaftProtocolDefs.js → react-native/RaftProtocolDefs.js} +0 -0
- /package/dist/{RaftStreamHandler.d.ts → react-native/RaftStreamHandler.d.ts} +0 -0
- /package/dist/{RaftStreamHandler.js → react-native/RaftStreamHandler.js} +0 -0
- /package/dist/{RaftSystemType.js → react-native/RaftSystemType.js} +0 -0
- /package/dist/{RaftSystemUtils.d.ts → react-native/RaftSystemUtils.d.ts} +0 -0
- /package/dist/{RaftSystemUtils.js → react-native/RaftSystemUtils.js} +0 -0
- /package/dist/{RaftUpdateEvents.d.ts → react-native/RaftUpdateEvents.d.ts} +0 -0
- /package/dist/{RaftUpdateEvents.js → react-native/RaftUpdateEvents.js} +0 -0
- /package/dist/{RaftUpdateManager.d.ts → react-native/RaftUpdateManager.d.ts} +0 -0
- /package/dist/{RaftUpdateManager.js → react-native/RaftUpdateManager.js} +0 -0
- /package/dist/{RaftUtils.d.ts → react-native/RaftUtils.d.ts} +0 -0
- /package/dist/{RaftWifiTypes.d.ts → react-native/RaftWifiTypes.d.ts} +0 -0
- /package/dist/{RaftWifiTypes.js → react-native/RaftWifiTypes.js} +0 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description
|
|
3
|
+
* This file is used to create a new instance of the RaftChannelBLE class.
|
|
4
|
+
* RaftChannelBLE exists in 2 files: RaftChannelBLE.native.ts and RaftChannelBLE.web.ts
|
|
5
|
+
* each of these files contains the same class but with different implementations (native and web).
|
|
6
|
+
* The import statement at the top of the file will import the correct implementation based on the platform
|
|
7
|
+
* (depending on the build configuration).
|
|
8
|
+
*/
|
|
9
|
+
import RaftChannelBLE from './RaftChannelBLE';
|
|
10
|
+
export declare function createBLEChannel(): typeof RaftChannelBLE;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createBLEChannel = createBLEChannel;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
/**
|
|
6
|
+
* @description
|
|
7
|
+
* This file is used to create a new instance of the RaftChannelBLE class.
|
|
8
|
+
* RaftChannelBLE exists in 2 files: RaftChannelBLE.native.ts and RaftChannelBLE.web.ts
|
|
9
|
+
* each of these files contains the same class but with different implementations (native and web).
|
|
10
|
+
* The import statement at the top of the file will import the correct implementation based on the platform
|
|
11
|
+
* (depending on the build configuration).
|
|
12
|
+
*/
|
|
13
|
+
const RaftChannelBLE_1 = tslib_1.__importDefault(require("./RaftChannelBLE"));
|
|
14
|
+
function createBLEChannel() {
|
|
15
|
+
return RaftChannelBLE_1.default;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=RaftChannelBLEFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RaftChannelBLEFactory.js","sourceRoot":"","sources":["../../src/RaftChannelBLEFactory.ts"],"names":[],"mappings":";;AAUA,4CAEC;;AAZD;;;;;;;GAOG;AACH,8EAA8C;AAE9C,SAAgB,gBAAgB;IAC9B,OAAO,wBAAc,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import RaftChannel from "./RaftChannel";
|
|
2
|
+
import RaftMsgHandler from "./RaftMsgHandler";
|
|
3
|
+
import { RaftConnEventFn } from "./RaftConnEvents";
|
|
4
|
+
import { ConnectorOptions } from "./RaftSystemType";
|
|
5
|
+
export default class RaftChannelWebSerial implements RaftChannel {
|
|
6
|
+
private _raftMsgHandler;
|
|
7
|
+
private _port;
|
|
8
|
+
private _reader?;
|
|
9
|
+
private _isConnected;
|
|
10
|
+
private _connPaused;
|
|
11
|
+
private _serialBuffer;
|
|
12
|
+
private _escapeSeqCode;
|
|
13
|
+
private _OVERASCII_ESCAPE_1;
|
|
14
|
+
private _OVERASCII_ESCAPE_2;
|
|
15
|
+
private _OVERASCII_ESCAPE_3;
|
|
16
|
+
private _OVERASCII_MOD_CODE;
|
|
17
|
+
private _onConnEvent;
|
|
18
|
+
private _requestedBatchAckSize;
|
|
19
|
+
private _requestedFileBlockSize;
|
|
20
|
+
fhBatchAckSize(): number;
|
|
21
|
+
fhFileBlockSize(): number;
|
|
22
|
+
isConnected(): boolean;
|
|
23
|
+
setMsgHandler(raftMsgHandler: RaftMsgHandler): void;
|
|
24
|
+
requiresSubscription(): boolean;
|
|
25
|
+
ricRestCmdBeforeDisconnect(): string | null;
|
|
26
|
+
setOnConnEvent(connEventFn: RaftConnEventFn): void;
|
|
27
|
+
getConnectedLocator(): string | object;
|
|
28
|
+
connect(locator: string | object, _connectorOptions: ConnectorOptions): Promise<boolean>;
|
|
29
|
+
disconnect(): Promise<void>;
|
|
30
|
+
pauseConnection(pause: boolean): void;
|
|
31
|
+
private _overasciiDecodeByte;
|
|
32
|
+
private _overasciiEncode;
|
|
33
|
+
_onMsgRx(msg: Uint8Array | null): void;
|
|
34
|
+
sendTxMsg(msg: Uint8Array, sendWithResponse: boolean): Promise<boolean>;
|
|
35
|
+
sendTxMsgNoAwait(msg: Uint8Array, sendWithResponse: boolean): Promise<boolean>;
|
|
36
|
+
_readLoop(): Promise<void>;
|
|
37
|
+
}
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
3
|
+
//
|
|
4
|
+
// RaftChannelWebSerial
|
|
5
|
+
// Part of RaftJS
|
|
6
|
+
//
|
|
7
|
+
// Rob Dobson & Chris Greening 2020-2024
|
|
8
|
+
// (C) 2020-2024 All rights reserved
|
|
9
|
+
//
|
|
10
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const tslib_1 = require("tslib");
|
|
13
|
+
const RaftLog_1 = tslib_1.__importDefault(require("./RaftLog"));
|
|
14
|
+
const RaftConnEvents_1 = require("./RaftConnEvents");
|
|
15
|
+
const text_encoding_1 = require("text-encoding");
|
|
16
|
+
class RaftChannelWebSerial {
|
|
17
|
+
constructor() {
|
|
18
|
+
// Message handler
|
|
19
|
+
this._raftMsgHandler = null;
|
|
20
|
+
this._port = null;
|
|
21
|
+
// Last message tx time
|
|
22
|
+
// private _msgTxTimeLast = Date.now();
|
|
23
|
+
// private _msgTxMinTimeBetweenMs = 15;
|
|
24
|
+
// Is connected
|
|
25
|
+
this._isConnected = false;
|
|
26
|
+
this._connPaused = false;
|
|
27
|
+
this._serialBuffer = [];
|
|
28
|
+
this._escapeSeqCode = 0;
|
|
29
|
+
this._OVERASCII_ESCAPE_1 = 0x85;
|
|
30
|
+
this._OVERASCII_ESCAPE_2 = 0x8E;
|
|
31
|
+
this._OVERASCII_ESCAPE_3 = 0x8F;
|
|
32
|
+
this._OVERASCII_MOD_CODE = 0x20;
|
|
33
|
+
// Conn event fn
|
|
34
|
+
this._onConnEvent = null;
|
|
35
|
+
// File Handler parameters
|
|
36
|
+
this._requestedBatchAckSize = 1;
|
|
37
|
+
this._requestedFileBlockSize = 1200;
|
|
38
|
+
}
|
|
39
|
+
fhBatchAckSize() { return this._requestedBatchAckSize; }
|
|
40
|
+
fhFileBlockSize() { return this._requestedFileBlockSize; }
|
|
41
|
+
// isConnected
|
|
42
|
+
isConnected() {
|
|
43
|
+
return this._isConnected;
|
|
44
|
+
}
|
|
45
|
+
// Set message handler
|
|
46
|
+
setMsgHandler(raftMsgHandler) {
|
|
47
|
+
this._raftMsgHandler = raftMsgHandler;
|
|
48
|
+
}
|
|
49
|
+
// Serial interface will require subscription, but don't start it by default
|
|
50
|
+
requiresSubscription() {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
// RICREST command before disconnect
|
|
54
|
+
ricRestCmdBeforeDisconnect() {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
// Set onConnEvent handler
|
|
58
|
+
setOnConnEvent(connEventFn) {
|
|
59
|
+
this._onConnEvent = connEventFn;
|
|
60
|
+
}
|
|
61
|
+
// Get connected locator
|
|
62
|
+
getConnectedLocator() {
|
|
63
|
+
return this._port || "";
|
|
64
|
+
}
|
|
65
|
+
// Connect to a device
|
|
66
|
+
async connect(locator, _connectorOptions) {
|
|
67
|
+
console.log("_connectorOptions", _connectorOptions);
|
|
68
|
+
// Debug
|
|
69
|
+
RaftLog_1.default.debug("RaftChannelWebSerial.connect " + locator.toString());
|
|
70
|
+
// Check already connected
|
|
71
|
+
if (await this.isConnected()) {
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
if (('serial' in navigator) && (!this._port || locator != "reusePort")) {
|
|
76
|
+
const port = await navigator.serial.requestPort();
|
|
77
|
+
this._port = port;
|
|
78
|
+
}
|
|
79
|
+
// Connect
|
|
80
|
+
if (!this._port)
|
|
81
|
+
return false;
|
|
82
|
+
try {
|
|
83
|
+
RaftLog_1.default.info("opening port");
|
|
84
|
+
await this._port.open({ baudRate: 115200 });
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
if (err.name == "InvalidStateError") {
|
|
88
|
+
RaftLog_1.default.debug(`Opening port failed - already open ${err}`);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
RaftLog_1.default.error(`Opening port failed: ${err}`);
|
|
92
|
+
throw err;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
this._isConnected = true;
|
|
96
|
+
// start read loop
|
|
97
|
+
this._readLoop();
|
|
98
|
+
this._port.addEventListener('disconnect', (event) => {
|
|
99
|
+
RaftLog_1.default.debug("WebSerial disconnect " + JSON.stringify(event));
|
|
100
|
+
if (this._onConnEvent)
|
|
101
|
+
this._onConnEvent(RaftConnEvents_1.RaftConnEvent.CONN_DISCONNECTED);
|
|
102
|
+
});
|
|
103
|
+
// TODO: handle errors
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
RaftLog_1.default.error("RaftChannelWebSerial.connect fail. Error: " + JSON.stringify(err));
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
// Disconnect
|
|
112
|
+
async disconnect() {
|
|
113
|
+
// Not connected
|
|
114
|
+
this._isConnected = false;
|
|
115
|
+
RaftLog_1.default.debug(`RaftChannelWebSerial.disconnect attempting to close webserial`);
|
|
116
|
+
while (this._reader) {
|
|
117
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
118
|
+
}
|
|
119
|
+
// Disconnect webserial
|
|
120
|
+
try {
|
|
121
|
+
if (this._port)
|
|
122
|
+
await this._port.close();
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
console.debug(`Error closing port ${err}`);
|
|
126
|
+
}
|
|
127
|
+
if (this._onConnEvent)
|
|
128
|
+
this._onConnEvent(RaftConnEvents_1.RaftConnEvent.CONN_DISCONNECTED);
|
|
129
|
+
RaftLog_1.default.debug("WebSerial port closed");
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
pauseConnection(pause) {
|
|
133
|
+
this._connPaused = pause;
|
|
134
|
+
}
|
|
135
|
+
_overasciiDecodeByte(ch) {
|
|
136
|
+
// Check if in escape sequence
|
|
137
|
+
if (this._escapeSeqCode != 0) {
|
|
138
|
+
const prevEscCode = this._escapeSeqCode;
|
|
139
|
+
this._escapeSeqCode = 0;
|
|
140
|
+
if (prevEscCode == 1) {
|
|
141
|
+
return (ch ^ this._OVERASCII_MOD_CODE) & 0x7f;
|
|
142
|
+
}
|
|
143
|
+
else if (prevEscCode == 2) {
|
|
144
|
+
return ch ^ this._OVERASCII_MOD_CODE;
|
|
145
|
+
}
|
|
146
|
+
return ch;
|
|
147
|
+
}
|
|
148
|
+
else if (ch == this._OVERASCII_ESCAPE_1) {
|
|
149
|
+
this._escapeSeqCode = 1;
|
|
150
|
+
return -1;
|
|
151
|
+
}
|
|
152
|
+
else if (ch == this._OVERASCII_ESCAPE_2) {
|
|
153
|
+
this._escapeSeqCode = 2;
|
|
154
|
+
return -1;
|
|
155
|
+
}
|
|
156
|
+
else if (ch == this._OVERASCII_ESCAPE_3) {
|
|
157
|
+
this._escapeSeqCode = 3;
|
|
158
|
+
return -1;
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
return ch & 0x7f;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
_overasciiEncode(inData) {
|
|
165
|
+
/*
|
|
166
|
+
Encode frame
|
|
167
|
+
Values 0x00-0x0F map to ESCAPE_CODE_1, VALUE_XOR_20H_AND_MSB_SET
|
|
168
|
+
Values 0x10-0x7f map to VALUE_WITH_MSB_SET
|
|
169
|
+
Values 0x80-0x8F map to ESCAPE_CODE_2, VALUE_XOR_20H
|
|
170
|
+
Values 0x90-0xff map to ESCAPE_CODE_3, VALUE
|
|
171
|
+
Value ESCAPE_CODE_1 maps to ESCAPE_CODE_1 + VALUE
|
|
172
|
+
Args:
|
|
173
|
+
inData: data to encode (bytes)
|
|
174
|
+
Returns:
|
|
175
|
+
encoded frame (bytes)
|
|
176
|
+
*/
|
|
177
|
+
// Iterate over frame
|
|
178
|
+
const encodedFrame = [];
|
|
179
|
+
for (let i = 0; i < inData.length; i++) {
|
|
180
|
+
if (inData[i] <= 0x0f) {
|
|
181
|
+
encodedFrame.push(this._OVERASCII_ESCAPE_1);
|
|
182
|
+
encodedFrame.push((inData[i] ^ this._OVERASCII_MOD_CODE) | 0x80);
|
|
183
|
+
}
|
|
184
|
+
else if ((inData[i] >= 0x10) && (inData[i] <= 0x7f)) {
|
|
185
|
+
encodedFrame.push(inData[i] | 0x80);
|
|
186
|
+
}
|
|
187
|
+
else if ((inData[i] >= 0x80) && (inData[i] <= 0x8f)) {
|
|
188
|
+
encodedFrame.push(this._OVERASCII_ESCAPE_2);
|
|
189
|
+
encodedFrame.push(inData[i] ^ this._OVERASCII_MOD_CODE);
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
encodedFrame.push(this._OVERASCII_ESCAPE_3);
|
|
193
|
+
encodedFrame.push(inData[i]);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return new Uint8Array(encodedFrame);
|
|
197
|
+
}
|
|
198
|
+
// Handle notifications
|
|
199
|
+
_onMsgRx(msg) {
|
|
200
|
+
if (msg === null)
|
|
201
|
+
return;
|
|
202
|
+
// Debug
|
|
203
|
+
//const decoder = new TextDecoder();
|
|
204
|
+
//RaftLog.debug(`RaftChannelWebSerial._onMsgRx ${decoder.decode(msg)}`);
|
|
205
|
+
const overasciiBuffer = [];
|
|
206
|
+
for (let i = 0; i < msg.length; i++) {
|
|
207
|
+
if (msg[i] > 127) {
|
|
208
|
+
const ch = this._overasciiDecodeByte(msg[i]);
|
|
209
|
+
if (ch != -1) {
|
|
210
|
+
overasciiBuffer.push(ch);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
this._serialBuffer.push(msg[i]);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if (this._raftMsgHandler)
|
|
218
|
+
this._raftMsgHandler.handleNewRxMsg(new Uint8Array(overasciiBuffer));
|
|
219
|
+
// any output over the non overascii channel will be delimited by a new line character
|
|
220
|
+
// scan for this, and log any lines as they occur before removing them from the buffer
|
|
221
|
+
if (this._serialBuffer.includes(0x0a)) {
|
|
222
|
+
const decoder = new text_encoding_1.TextDecoder();
|
|
223
|
+
RaftLog_1.default.debug(decoder.decode(new Uint8Array(this._serialBuffer.slice(0, this._serialBuffer.indexOf(0x0a)))));
|
|
224
|
+
this._serialBuffer.splice(0, this._serialBuffer.indexOf(0x0a) + 1);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
// Send a message
|
|
228
|
+
async sendTxMsg(msg, sendWithResponse) {
|
|
229
|
+
// Check connected
|
|
230
|
+
if (!this._isConnected || !this._port)
|
|
231
|
+
return false;
|
|
232
|
+
// Debug
|
|
233
|
+
const decoder = new text_encoding_1.TextDecoder();
|
|
234
|
+
RaftLog_1.default.verbose(`RaftChannelWebSerial.sendTxMsg ${msg.toString()} ${decoder.decode(msg)} sendWithResp ${sendWithResponse.toString()}`);
|
|
235
|
+
try {
|
|
236
|
+
if (this._port.writable != null) {
|
|
237
|
+
const writer = this._port.writable.getWriter();
|
|
238
|
+
await writer.write(this._overasciiEncode(msg));
|
|
239
|
+
writer.releaseLock();
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
catch (err) {
|
|
243
|
+
RaftLog_1.default.warn("sendMsg error: " + JSON.stringify(err));
|
|
244
|
+
return false;
|
|
245
|
+
}
|
|
246
|
+
return true;
|
|
247
|
+
}
|
|
248
|
+
async sendTxMsgNoAwait(msg, sendWithResponse) {
|
|
249
|
+
// Check connected
|
|
250
|
+
if (!this._isConnected || !this._port)
|
|
251
|
+
return false;
|
|
252
|
+
// Debug
|
|
253
|
+
RaftLog_1.default.verbose(`RaftChannelWebSerial.sendTxMsgNoAwait ${msg.toString()} sendWithResp ${sendWithResponse.toString()}`);
|
|
254
|
+
try {
|
|
255
|
+
if (this._port.writable != null) {
|
|
256
|
+
const writer = this._port.writable.getWriter();
|
|
257
|
+
writer.write(msg).then(() => { writer.releaseLock(); });
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
catch (err) {
|
|
261
|
+
RaftLog_1.default.error("sendMsg error: " + JSON.stringify(err));
|
|
262
|
+
}
|
|
263
|
+
return true;
|
|
264
|
+
}
|
|
265
|
+
async _readLoop() {
|
|
266
|
+
RaftLog_1.default.debug("Starting read loop");
|
|
267
|
+
if (!this._port)
|
|
268
|
+
return;
|
|
269
|
+
let retries = 10;
|
|
270
|
+
try {
|
|
271
|
+
if (!this._port.readable) {
|
|
272
|
+
RaftLog_1.default.error("RaftChannelWebSerial _readLoop port is not readble");
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
this._reader = this._port.readable.getReader();
|
|
276
|
+
while (this._port.readable && this._isConnected) {
|
|
277
|
+
if (this._connPaused) {
|
|
278
|
+
if (this._reader) {
|
|
279
|
+
this._reader.releaseLock();
|
|
280
|
+
this._reader = undefined;
|
|
281
|
+
}
|
|
282
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
283
|
+
continue;
|
|
284
|
+
}
|
|
285
|
+
try {
|
|
286
|
+
if (!this._reader)
|
|
287
|
+
this._reader = this._port.readable.getReader();
|
|
288
|
+
const { value, done } = await this._reader.read();
|
|
289
|
+
if (done) {
|
|
290
|
+
this._reader.releaseLock();
|
|
291
|
+
break;
|
|
292
|
+
}
|
|
293
|
+
if (!value || value.length === 0) {
|
|
294
|
+
continue;
|
|
295
|
+
}
|
|
296
|
+
this._onMsgRx(new Uint8Array(value));
|
|
297
|
+
}
|
|
298
|
+
catch (err) {
|
|
299
|
+
RaftLog_1.default.error("read loop issue: " + JSON.stringify(err));
|
|
300
|
+
retries -= 1;
|
|
301
|
+
if (!retries)
|
|
302
|
+
break;
|
|
303
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
304
|
+
this._reader = this._port.readable.getReader();
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
if (this._reader)
|
|
308
|
+
this._reader.releaseLock();
|
|
309
|
+
this._reader = undefined;
|
|
310
|
+
}
|
|
311
|
+
catch (err) {
|
|
312
|
+
RaftLog_1.default.error("Read loop got disconnected. err: " + JSON.stringify(err));
|
|
313
|
+
}
|
|
314
|
+
// Disconnected!
|
|
315
|
+
this._isConnected = false;
|
|
316
|
+
RaftLog_1.default.debug("Finished read loop");
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
exports.default = RaftChannelWebSerial;
|
|
320
|
+
//# sourceMappingURL=RaftChannelWebSerial.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RaftChannelWebSerial.js","sourceRoot":"","sources":["../../src/RaftChannelWebSerial.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import RaftChannel from "./RaftChannel";
|
|
2
|
+
import RaftMsgHandler from "./RaftMsgHandler";
|
|
3
|
+
import { RaftConnEventFn } from "./RaftConnEvents";
|
|
4
|
+
import { ConnectorOptions } from "./RaftSystemType";
|
|
5
|
+
export default class RaftChannelWebSocket implements RaftChannel {
|
|
6
|
+
private _raftMsgHandler;
|
|
7
|
+
private _webSocket;
|
|
8
|
+
private _isConnected;
|
|
9
|
+
private _onConnEvent;
|
|
10
|
+
private _requestedBatchAckSize;
|
|
11
|
+
private _requestedFileBlockSize;
|
|
12
|
+
fhBatchAckSize(): number;
|
|
13
|
+
fhFileBlockSize(): number;
|
|
14
|
+
isConnected(): boolean;
|
|
15
|
+
setMsgHandler(raftMsgHandler: RaftMsgHandler): void;
|
|
16
|
+
requiresSubscription(): boolean;
|
|
17
|
+
ricRestCmdBeforeDisconnect(): string | null;
|
|
18
|
+
setOnConnEvent(connEventFn: RaftConnEventFn): void;
|
|
19
|
+
getConnectedLocator(): string | object;
|
|
20
|
+
connect(locator: string | object, connectorOptions: ConnectorOptions): Promise<boolean>;
|
|
21
|
+
disconnect(): Promise<void>;
|
|
22
|
+
pauseConnection(pause: boolean): void;
|
|
23
|
+
_onMsgRx(msg: Uint8Array | null): void;
|
|
24
|
+
sendTxMsg(msg: Uint8Array, sendWithResponse: boolean): Promise<boolean>;
|
|
25
|
+
sendTxMsgNoAwait(msg: Uint8Array, sendWithResponse: boolean): Promise<boolean>;
|
|
26
|
+
_wsConnect(locator: string | object): Promise<boolean>;
|
|
27
|
+
private _webSocketOpen;
|
|
28
|
+
}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
3
|
+
//
|
|
4
|
+
// RaftChannelWebSockets
|
|
5
|
+
// Part of RaftJS
|
|
6
|
+
//
|
|
7
|
+
// Rob Dobson & Chris Greening 2020-2024
|
|
8
|
+
// (C) 2020-2024 All rights reserved
|
|
9
|
+
//
|
|
10
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const tslib_1 = require("tslib");
|
|
13
|
+
const isomorphic_ws_1 = tslib_1.__importDefault(require("isomorphic-ws"));
|
|
14
|
+
const RaftLog_1 = tslib_1.__importDefault(require("./RaftLog"));
|
|
15
|
+
const RaftUtils_1 = tslib_1.__importDefault(require("./RaftUtils"));
|
|
16
|
+
const RaftConnEvents_1 = require("./RaftConnEvents");
|
|
17
|
+
class RaftChannelWebSocket {
|
|
18
|
+
constructor() {
|
|
19
|
+
// Message handler
|
|
20
|
+
this._raftMsgHandler = null;
|
|
21
|
+
// Websocket we are connected to
|
|
22
|
+
this._webSocket = null;
|
|
23
|
+
// Last message tx time
|
|
24
|
+
// private _msgTxTimeLast = Date.now();
|
|
25
|
+
// private _msgTxMinTimeBetweenMs = 15;
|
|
26
|
+
// Is connected
|
|
27
|
+
this._isConnected = false;
|
|
28
|
+
// Conn event fn
|
|
29
|
+
this._onConnEvent = null;
|
|
30
|
+
// File Handler parameters
|
|
31
|
+
this._requestedBatchAckSize = 10;
|
|
32
|
+
this._requestedFileBlockSize = 500;
|
|
33
|
+
}
|
|
34
|
+
fhBatchAckSize() { return this._requestedBatchAckSize; }
|
|
35
|
+
fhFileBlockSize() { return this._requestedFileBlockSize; }
|
|
36
|
+
// isConnected
|
|
37
|
+
isConnected() {
|
|
38
|
+
return this._isConnected;
|
|
39
|
+
}
|
|
40
|
+
// Set message handler
|
|
41
|
+
setMsgHandler(raftMsgHandler) {
|
|
42
|
+
this._raftMsgHandler = raftMsgHandler;
|
|
43
|
+
}
|
|
44
|
+
// WebSocket interfaces require subscription to published messages
|
|
45
|
+
requiresSubscription() {
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
// RICREST command before disconnect
|
|
49
|
+
ricRestCmdBeforeDisconnect() {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
// Set onConnEvent handler
|
|
53
|
+
setOnConnEvent(connEventFn) {
|
|
54
|
+
this._onConnEvent = connEventFn;
|
|
55
|
+
}
|
|
56
|
+
// Get connected locator
|
|
57
|
+
getConnectedLocator() {
|
|
58
|
+
return this._webSocket;
|
|
59
|
+
}
|
|
60
|
+
// Connect to a device
|
|
61
|
+
async connect(locator, connectorOptions) {
|
|
62
|
+
// Debug
|
|
63
|
+
RaftLog_1.default.debug("RaftChannelWebSocket.connect " + locator.toString());
|
|
64
|
+
// Get ws suffix
|
|
65
|
+
const wsSuffix = connectorOptions ? (connectorOptions.wsSuffix ? connectorOptions.wsSuffix : "ws") : "ws";
|
|
66
|
+
// Connect
|
|
67
|
+
const connOk = await this._wsConnect("ws://" + locator + "/" + wsSuffix);
|
|
68
|
+
return connOk;
|
|
69
|
+
}
|
|
70
|
+
// Disconnect
|
|
71
|
+
async disconnect() {
|
|
72
|
+
var _a;
|
|
73
|
+
// Not connected
|
|
74
|
+
this._isConnected = false;
|
|
75
|
+
// Disconnect websocket
|
|
76
|
+
(_a = this._webSocket) === null || _a === void 0 ? void 0 : _a.close(1000);
|
|
77
|
+
// Debug
|
|
78
|
+
RaftLog_1.default.debug(`RaftChannelWebSocket.disconnect attempting to close websocket`);
|
|
79
|
+
}
|
|
80
|
+
pauseConnection(pause) { RaftLog_1.default.verbose(`pauseConnection ${pause} - no effect for this channel type`); return; }
|
|
81
|
+
// Handle notifications
|
|
82
|
+
_onMsgRx(msg) {
|
|
83
|
+
// Debug
|
|
84
|
+
if (msg !== null) {
|
|
85
|
+
RaftLog_1.default.verbose(`RaftChannelWebSocket._onMsgRx ${RaftUtils_1.default.bufferToHex(msg)}`);
|
|
86
|
+
}
|
|
87
|
+
// Handle message
|
|
88
|
+
if (msg !== null && this._raftMsgHandler) {
|
|
89
|
+
this._raftMsgHandler.handleNewRxMsg(msg);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Send a message
|
|
93
|
+
async sendTxMsg(msg, sendWithResponse) {
|
|
94
|
+
var _a;
|
|
95
|
+
// Check connected
|
|
96
|
+
if (!this._isConnected)
|
|
97
|
+
return false;
|
|
98
|
+
// Debug
|
|
99
|
+
RaftLog_1.default.verbose(`RaftChannelWebSocket.sendTxMsg ${msg.toString()} sendWithResp ${sendWithResponse.toString()}`);
|
|
100
|
+
// Send over websocket
|
|
101
|
+
try {
|
|
102
|
+
await ((_a = this._webSocket) === null || _a === void 0 ? void 0 : _a.send(msg));
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
RaftLog_1.default.warn(`RaftChannelWebSocket.sendTxMsg - send failed ${error}`);
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
async sendTxMsgNoAwait(msg, sendWithResponse) {
|
|
111
|
+
var _a;
|
|
112
|
+
// Check connected
|
|
113
|
+
if (!this._isConnected)
|
|
114
|
+
return false;
|
|
115
|
+
// Debug
|
|
116
|
+
RaftLog_1.default.verbose(`RaftChannelWebSocket.sendTxMsgNoAwait ${msg.toString()} sendWithResp ${sendWithResponse.toString()}`);
|
|
117
|
+
// Send over websocket
|
|
118
|
+
(_a = this._webSocket) === null || _a === void 0 ? void 0 : _a.send(msg);
|
|
119
|
+
return true;
|
|
120
|
+
}
|
|
121
|
+
async _wsConnect(locator) {
|
|
122
|
+
// Check already connected
|
|
123
|
+
if (await this.isConnected()) {
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
// Form websocket address
|
|
127
|
+
const wsURL = locator.toString();
|
|
128
|
+
// Connect to websocket
|
|
129
|
+
// try {
|
|
130
|
+
// this._webSocket = await this._webSocketOpen(wsURL);
|
|
131
|
+
// } catch (error: any) {
|
|
132
|
+
// RaftLog.debug(`Unable to create WebSocket ${error.toString()}`);
|
|
133
|
+
// return false;
|
|
134
|
+
// }
|
|
135
|
+
this._webSocket = null;
|
|
136
|
+
return new Promise((resolve, reject) => {
|
|
137
|
+
this._webSocketOpen(wsURL).then((ws) => {
|
|
138
|
+
this._webSocket = ws;
|
|
139
|
+
RaftLog_1.default.debug(`_wsConnect - opened connection`);
|
|
140
|
+
// Handle messages
|
|
141
|
+
this._webSocket.onmessage = (evt) => {
|
|
142
|
+
// RaftLog.debug("WebSocket rx");
|
|
143
|
+
if (evt.data instanceof ArrayBuffer) {
|
|
144
|
+
const msg = new Uint8Array(evt.data);
|
|
145
|
+
this._onMsgRx(msg);
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
// Handle close event
|
|
149
|
+
this._webSocket.onclose = (evt) => {
|
|
150
|
+
RaftLog_1.default.info(`_wsConnect - closed code ${evt.code} wasClean ${evt.wasClean} reason ${evt.reason}`);
|
|
151
|
+
this._webSocket = null;
|
|
152
|
+
this._isConnected = false;
|
|
153
|
+
// Event handler
|
|
154
|
+
if (this._onConnEvent) {
|
|
155
|
+
this._onConnEvent(RaftConnEvents_1.RaftConnEvent.CONN_DISCONNECTED);
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
// Resolve the promise - success
|
|
159
|
+
resolve(true);
|
|
160
|
+
}).catch((err) => {
|
|
161
|
+
if (err instanceof Error) {
|
|
162
|
+
RaftLog_1.default.verbose(`WS open failed ${err.toString()}`);
|
|
163
|
+
}
|
|
164
|
+
// Resolve - failed
|
|
165
|
+
reject(false);
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
async _webSocketOpen(url) {
|
|
170
|
+
return new Promise((resolve, reject) => {
|
|
171
|
+
// Debug
|
|
172
|
+
// RaftLog.debug('Attempting WebSocket connection');
|
|
173
|
+
// Open the socket
|
|
174
|
+
try {
|
|
175
|
+
const webSocket = new isomorphic_ws_1.default(url);
|
|
176
|
+
// Open socket
|
|
177
|
+
webSocket.binaryType = "arraybuffer";
|
|
178
|
+
webSocket.onopen = (_evt) => {
|
|
179
|
+
RaftLog_1.default.debug(`RaftChannelWebSocket._webSocketOpen - onopen ${_evt.toString()}`);
|
|
180
|
+
// // We're connected
|
|
181
|
+
this._isConnected = true;
|
|
182
|
+
resolve(webSocket);
|
|
183
|
+
};
|
|
184
|
+
webSocket.onerror = function (evt) {
|
|
185
|
+
RaftLog_1.default.warn(`RaftChannelWebSocket._webSocketOpen - onerror: ${evt.message}`);
|
|
186
|
+
reject(evt);
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
RaftLog_1.default.warn(`RaftChannelWebSocket._webSocketOpen - open failed ${error}`);
|
|
191
|
+
reject(error);
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
exports.default = RaftChannelWebSocket;
|
|
197
|
+
//# sourceMappingURL=RaftChannelWebSocket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RaftChannelWebSocket.js","sourceRoot":"","sources":["../../src/RaftChannelWebSocket.ts"],"names":[],"mappings":"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"}
|