@robdobsn/raftjs 1.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/.editorconfig +14 -0
- package/.gitattributes +11 -0
- package/.nvmrc +1 -0
- package/LICENSE +22 -0
- package/README.md +11 -0
- package/TODO.md +1 -0
- package/dist/RaftAttributeHandler.d.ts +12 -0
- package/dist/RaftAttributeHandler.js +241 -0
- package/dist/RaftAttributeHandler.js.map +1 -0
- package/dist/RaftChannel.d.ts +18 -0
- package/dist/RaftChannel.js +12 -0
- package/dist/RaftChannel.js.map +1 -0
- package/dist/RaftChannelWebBLE.d.ts +38 -0
- package/dist/RaftChannelWebBLE.js +274 -0
- package/dist/RaftChannelWebBLE.js.map +1 -0
- package/dist/RaftChannelWebSerial.d.ts +37 -0
- package/dist/RaftChannelWebSerial.js +319 -0
- package/dist/RaftChannelWebSerial.js.map +1 -0
- package/dist/RaftChannelWebSocket.d.ts +28 -0
- package/dist/RaftChannelWebSocket.js +197 -0
- package/dist/RaftChannelWebSocket.js.map +1 -0
- package/dist/RaftCommsStats.d.ts +39 -0
- package/dist/RaftCommsStats.js +128 -0
- package/dist/RaftCommsStats.js.map +1 -0
- package/dist/RaftConnEvents.d.ts +31 -0
- package/dist/RaftConnEvents.js +44 -0
- package/dist/RaftConnEvents.js.map +1 -0
- package/dist/RaftConnector.d.ts +242 -0
- package/dist/RaftConnector.js +613 -0
- package/dist/RaftConnector.js.map +1 -0
- package/dist/RaftCustomAttrHandler.d.ts +4 -0
- package/dist/RaftCustomAttrHandler.js +50 -0
- package/dist/RaftCustomAttrHandler.js.map +1 -0
- package/dist/RaftDeviceInfo.d.ts +64 -0
- package/dist/RaftDeviceInfo.js +36 -0
- package/dist/RaftDeviceInfo.js.map +1 -0
- package/dist/RaftDeviceManager.d.ts +37 -0
- package/dist/RaftDeviceManager.js +450 -0
- package/dist/RaftDeviceManager.js.map +1 -0
- package/dist/RaftDeviceMsg.d.ts +9 -0
- package/dist/RaftDeviceMsg.js +11 -0
- package/dist/RaftDeviceMsg.js.map +1 -0
- package/dist/RaftDeviceStates.d.ts +33 -0
- package/dist/RaftDeviceStates.js +60 -0
- package/dist/RaftDeviceStates.js.map +1 -0
- package/dist/RaftFileHandler.d.ts +52 -0
- package/dist/RaftFileHandler.js +502 -0
- package/dist/RaftFileHandler.js.map +1 -0
- package/dist/RaftLog.d.ts +22 -0
- package/dist/RaftLog.js +63 -0
- package/dist/RaftLog.js.map +1 -0
- package/dist/RaftMiniHDLC.d.ts +18 -0
- package/dist/RaftMiniHDLC.js +383 -0
- package/dist/RaftMiniHDLC.js.map +1 -0
- package/dist/RaftMsgHandler.d.ts +57 -0
- package/dist/RaftMsgHandler.js +480 -0
- package/dist/RaftMsgHandler.js.map +1 -0
- package/dist/RaftMsgTrackInfo.d.ts +17 -0
- package/dist/RaftMsgTrackInfo.js +42 -0
- package/dist/RaftMsgTrackInfo.js.map +1 -0
- package/dist/RaftProtocolDefs.d.ts +30 -0
- package/dist/RaftProtocolDefs.js +48 -0
- package/dist/RaftProtocolDefs.js.map +1 -0
- package/dist/RaftStreamHandler.d.ts +38 -0
- package/dist/RaftStreamHandler.js +257 -0
- package/dist/RaftStreamHandler.js.map +1 -0
- package/dist/RaftSystemType.d.ts +21 -0
- package/dist/RaftSystemType.js +3 -0
- package/dist/RaftSystemType.js.map +1 -0
- package/dist/RaftSystemUtils.d.ts +136 -0
- package/dist/RaftSystemUtils.js +410 -0
- package/dist/RaftSystemUtils.js.map +1 -0
- package/dist/RaftTypes.d.ts +184 -0
- package/dist/RaftTypes.js +157 -0
- package/dist/RaftTypes.js.map +1 -0
- package/dist/RaftUpdateEvents.d.ts +33 -0
- package/dist/RaftUpdateEvents.js +46 -0
- package/dist/RaftUpdateEvents.js.map +1 -0
- package/dist/RaftUpdateManager.d.ts +61 -0
- package/dist/RaftUpdateManager.js +618 -0
- package/dist/RaftUpdateManager.js.map +1 -0
- package/dist/RaftUtils.d.ts +125 -0
- package/dist/RaftUtils.js +454 -0
- package/dist/RaftUtils.js.map +1 -0
- package/dist/RaftWifiTypes.d.ts +23 -0
- package/dist/RaftWifiTypes.js +43 -0
- package/dist/RaftWifiTypes.js.map +1 -0
- package/dist/TestDataGen.d.ts +7 -0
- package/dist/TestDataGen.js +133 -0
- package/dist/TestDataGen.js.map +1 -0
- package/dist/main.d.ts +18 -0
- package/dist/main.js +42 -0
- package/dist/main.js.map +1 -0
- package/eslint.config.mjs +33 -0
- package/examples/dashboard/package.json +39 -0
- package/examples/dashboard/src/ConnManager.ts +86 -0
- package/examples/dashboard/src/Main.tsx +100 -0
- package/examples/dashboard/src/StatusScreen.tsx +72 -0
- package/examples/dashboard/src/SystemTypeCog/CogStateInfo.ts +144 -0
- package/examples/dashboard/src/SystemTypeCog/SystemTypeCog.ts +77 -0
- package/examples/dashboard/src/SystemTypeMarty/RICAddOn.ts +70 -0
- package/examples/dashboard/src/SystemTypeMarty/RICAddOnBase.ts +33 -0
- package/examples/dashboard/src/SystemTypeMarty/RICAddOnManager.ts +342 -0
- package/examples/dashboard/src/SystemTypeMarty/RICCommsStats.ts +170 -0
- package/examples/dashboard/src/SystemTypeMarty/RICHWElem.ts +123 -0
- package/examples/dashboard/src/SystemTypeMarty/RICLEDPatternChecker.ts +207 -0
- package/examples/dashboard/src/SystemTypeMarty/RICROSSerial.ts +464 -0
- package/examples/dashboard/src/SystemTypeMarty/RICServoFaultDetector.ts +146 -0
- package/examples/dashboard/src/SystemTypeMarty/RICStateInfo.ts +32 -0
- package/examples/dashboard/src/SystemTypeMarty/RICSystemUtils.ts +371 -0
- package/examples/dashboard/src/SystemTypeMarty/RICTypes.ts +20 -0
- package/examples/dashboard/src/SystemTypeMarty/SystemTypeMarty.ts +113 -0
- package/examples/dashboard/src/index.html +15 -0
- package/examples/dashboard/src/index.tsx +15 -0
- package/examples/dashboard/src/styles.css +122 -0
- package/examples/dashboard/tsconfig.json +18 -0
- package/jest.config.js +11 -0
- package/package.json +50 -0
- package/src/RaftAttributeHandler.ts +289 -0
- package/src/RaftChannel.ts +30 -0
- package/src/RaftChannelWebBLE.ts +342 -0
- package/src/RaftChannelWebSerial.ts +408 -0
- package/src/RaftChannelWebSocket.ts +245 -0
- package/src/RaftCommsStats.ts +142 -0
- package/src/RaftConnEvents.ts +46 -0
- package/src/RaftConnector.ts +745 -0
- package/src/RaftCustomAttrHandler.ts +54 -0
- package/src/RaftDeviceInfo.ts +104 -0
- package/src/RaftDeviceManager.ts +542 -0
- package/src/RaftDeviceMsg.ts +20 -0
- package/src/RaftDeviceStates.ts +89 -0
- package/src/RaftFileHandler.ts +668 -0
- package/src/RaftLog.ts +70 -0
- package/src/RaftMiniHDLC.ts +396 -0
- package/src/RaftMsgHandler.ts +778 -0
- package/src/RaftMsgTrackInfo.ts +51 -0
- package/src/RaftProtocolDefs.ts +46 -0
- package/src/RaftStreamHandler.ts +328 -0
- package/src/RaftSystemType.ts +25 -0
- package/src/RaftSystemUtils.ts +487 -0
- package/src/RaftTypes.ts +250 -0
- package/src/RaftUpdateEvents.ts +48 -0
- package/src/RaftUpdateManager.ts +778 -0
- package/src/RaftUtils.ts +484 -0
- package/src/RaftWifiTypes.ts +36 -0
- package/src/TestDataGen.ts +157 -0
- package/src/main.ts +28 -0
- package/testdata/TestDeviceTypeRecs.json +492 -0
- package/tsconfig.json +27 -0
|
@@ -0,0 +1,480 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
3
|
+
//
|
|
4
|
+
// RaftMsgHandler
|
|
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
|
+
exports.RaftMsgResultCode = void 0;
|
|
13
|
+
const tslib_1 = require("tslib");
|
|
14
|
+
const RaftMsgTrackInfo_1 = require("./RaftMsgTrackInfo");
|
|
15
|
+
const RaftLog_1 = tslib_1.__importDefault(require("./RaftLog"));
|
|
16
|
+
const RaftUtils_1 = tslib_1.__importDefault(require("./RaftUtils"));
|
|
17
|
+
const RaftProtocolDefs_1 = require("./RaftProtocolDefs");
|
|
18
|
+
const RaftMiniHDLC_1 = tslib_1.__importDefault(require("./RaftMiniHDLC"));
|
|
19
|
+
// Message results
|
|
20
|
+
var RaftMsgResultCode;
|
|
21
|
+
(function (RaftMsgResultCode) {
|
|
22
|
+
RaftMsgResultCode[RaftMsgResultCode["MESSAGE_RESULT_TIMEOUT"] = 0] = "MESSAGE_RESULT_TIMEOUT";
|
|
23
|
+
RaftMsgResultCode[RaftMsgResultCode["MESSAGE_RESULT_OK"] = 1] = "MESSAGE_RESULT_OK";
|
|
24
|
+
RaftMsgResultCode[RaftMsgResultCode["MESSAGE_RESULT_FAIL"] = 2] = "MESSAGE_RESULT_FAIL";
|
|
25
|
+
RaftMsgResultCode[RaftMsgResultCode["MESSAGE_RESULT_UNKNOWN"] = 3] = "MESSAGE_RESULT_UNKNOWN";
|
|
26
|
+
})(RaftMsgResultCode || (exports.RaftMsgResultCode = RaftMsgResultCode = {}));
|
|
27
|
+
class RaftMsgHandler {
|
|
28
|
+
// Constructor
|
|
29
|
+
constructor(commsStats) {
|
|
30
|
+
// Message numbering and tracking
|
|
31
|
+
this._currentMsgNumber = 1;
|
|
32
|
+
this._currentMsgHandle = 1;
|
|
33
|
+
this._msgTrackInfos = new Array(RaftMsgTrackInfo_1.RaftMsgTrackInfo.MAX_MSG_NUM + 1);
|
|
34
|
+
this._msgTrackTimerMs = 50;
|
|
35
|
+
this._msgTrackLastCheckIdx = 0;
|
|
36
|
+
// report message callback dictionary. Add a callback to subscribe to report messages
|
|
37
|
+
this._reportMsgCallbacks = new Map();
|
|
38
|
+
// Interface to inform of message results
|
|
39
|
+
this._msgResultHandler = null;
|
|
40
|
+
// Interface to send messages
|
|
41
|
+
this._msgSender = null;
|
|
42
|
+
this._commsStats = commsStats;
|
|
43
|
+
RaftLog_1.default.debug('RaftMsgHandler constructor');
|
|
44
|
+
// Message tracking
|
|
45
|
+
for (let i = 0; i < this._msgTrackInfos.length; i++) {
|
|
46
|
+
this._msgTrackInfos[i] = new RaftMsgTrackInfo_1.RaftMsgTrackInfo();
|
|
47
|
+
}
|
|
48
|
+
// Timer for checking messages
|
|
49
|
+
setTimeout(async () => {
|
|
50
|
+
this._onMsgTrackTimer(true);
|
|
51
|
+
}, this._msgTrackTimerMs);
|
|
52
|
+
// HDLC used to encode/decode the RICREST protocol
|
|
53
|
+
this._miniHDLC = new RaftMiniHDLC_1.default();
|
|
54
|
+
this._miniHDLC.setOnRxFrame(this._onHDLCFrameDecode.bind(this));
|
|
55
|
+
}
|
|
56
|
+
registerForResults(msgResultHandler) {
|
|
57
|
+
this._msgResultHandler = msgResultHandler;
|
|
58
|
+
}
|
|
59
|
+
registerMsgSender(RaftMessageSender) {
|
|
60
|
+
this._msgSender = RaftMessageSender;
|
|
61
|
+
}
|
|
62
|
+
handleNewRxMsg(rxMsg) {
|
|
63
|
+
this._miniHDLC.addRxBytes(rxMsg);
|
|
64
|
+
// RaftLog.verbose(`handleNewRxMsg len ${rxMsg.length} ${RaftUtils.bufferToHex(rxMsg)}`)
|
|
65
|
+
}
|
|
66
|
+
reportMsgCallbacksSet(callbackName, callback) {
|
|
67
|
+
this._reportMsgCallbacks.set(callbackName, callback);
|
|
68
|
+
}
|
|
69
|
+
reportMsgCallbacksDelete(callbackName) {
|
|
70
|
+
this._reportMsgCallbacks.delete(callbackName);
|
|
71
|
+
}
|
|
72
|
+
_onHDLCFrameDecode(rxMsg, frameTimeMs) {
|
|
73
|
+
var _a, _b;
|
|
74
|
+
// Add to stats
|
|
75
|
+
this._commsStats.msgRx();
|
|
76
|
+
// Validity
|
|
77
|
+
if (rxMsg.length < RaftProtocolDefs_1.RICSERIAL_PAYLOAD_POS) {
|
|
78
|
+
this._commsStats.msgTooShort();
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
// RaftLog.verbose(`_onHDLCFrameDecode len ${rxMsg.length}`);
|
|
82
|
+
// Decode the RICFrame header
|
|
83
|
+
let rxMsgNum = rxMsg[RaftProtocolDefs_1.RICSERIAL_MSG_NUM_POS] & 0xff;
|
|
84
|
+
let rxProtocol = rxMsg[RaftProtocolDefs_1.RICSERIAL_PROTOCOL_POS] & 0x3f;
|
|
85
|
+
let rxMsgType = (rxMsg[RaftProtocolDefs_1.RICSERIAL_PROTOCOL_POS] >> 6) & 0x03;
|
|
86
|
+
// Check for RICREST bridging protocol
|
|
87
|
+
if (rxProtocol == RaftProtocolDefs_1.RaftCommsMsgProtocol.MSG_PROTOCOL_BRIDGE_RICREST) {
|
|
88
|
+
// Debug
|
|
89
|
+
const bridgeID = rxMsg.length > RaftProtocolDefs_1.RICREST_BRIDGE_ID_POS ? rxMsg[RaftProtocolDefs_1.RICREST_BRIDGE_ID_POS] : 0;
|
|
90
|
+
RaftLog_1.default.info(`_onHDLCFrameDecode RICREST bridge rx bridgeID ${bridgeID} len ${rxMsg.length}`);
|
|
91
|
+
// Simply remove the wrapper
|
|
92
|
+
rxMsg = rxMsg.slice(RaftProtocolDefs_1.RICREST_BRIDGE_PAYLOAD_POS);
|
|
93
|
+
// Get the message info from the unwrapped message
|
|
94
|
+
rxMsgNum = rxMsg[RaftProtocolDefs_1.RICSERIAL_MSG_NUM_POS] & 0xff;
|
|
95
|
+
rxProtocol = rxMsg[RaftProtocolDefs_1.RICSERIAL_PROTOCOL_POS] & 0x3f;
|
|
96
|
+
rxMsgType = (rxMsg[RaftProtocolDefs_1.RICSERIAL_PROTOCOL_POS] >> 6) & 0x03;
|
|
97
|
+
}
|
|
98
|
+
// Check for RICREST protocol
|
|
99
|
+
if (rxProtocol == RaftProtocolDefs_1.RaftCommsMsgProtocol.MSG_PROTOCOL_RICREST) {
|
|
100
|
+
RaftLog_1.default.verbose(`_onHDLCFrameDecode RICREST rx msgNum ${rxMsgNum} msgDirn ${rxMsgType} ${RaftUtils_1.default.bufferToHex(rxMsg)}`);
|
|
101
|
+
// Extract payload
|
|
102
|
+
const ricRestElemCode = rxMsg[RaftProtocolDefs_1.RICSERIAL_PAYLOAD_POS + RaftProtocolDefs_1.RICREST_REST_ELEM_CODE_POS] & 0xff;
|
|
103
|
+
if (ricRestElemCode == RaftProtocolDefs_1.RICRESTElemCode.RICREST_ELEM_CODE_URL ||
|
|
104
|
+
ricRestElemCode == RaftProtocolDefs_1.RICRESTElemCode.RICREST_ELEM_CODE_CMDRESPJSON ||
|
|
105
|
+
ricRestElemCode == RaftProtocolDefs_1.RICRESTElemCode.RICREST_ELEM_CODE_COMMAND_FRAME) {
|
|
106
|
+
// These are all text-based messages
|
|
107
|
+
const restStr = RaftUtils_1.default.getStringFromBuffer(rxMsg, RaftProtocolDefs_1.RICSERIAL_PAYLOAD_POS + RaftProtocolDefs_1.RICREST_HEADER_PAYLOAD_POS, rxMsg.length - RaftProtocolDefs_1.RICSERIAL_PAYLOAD_POS - RaftProtocolDefs_1.RICREST_HEADER_PAYLOAD_POS - 1);
|
|
108
|
+
RaftLog_1.default.verbose(`_onHDLCFrameDecode RICREST rx elemCode ${ricRestElemCode} ${restStr}`);
|
|
109
|
+
// Check message types
|
|
110
|
+
if (rxMsgType == RaftProtocolDefs_1.RaftCommsMsgTypeCode.MSG_TYPE_RESPONSE) {
|
|
111
|
+
// Handle response messages
|
|
112
|
+
this._handleResponseMessages(restStr, rxMsgNum);
|
|
113
|
+
}
|
|
114
|
+
else if (rxMsgType == RaftProtocolDefs_1.RaftCommsMsgTypeCode.MSG_TYPE_REPORT) {
|
|
115
|
+
// Handle report messages
|
|
116
|
+
this._handleReportMessages(restStr);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
const binMsgLen = rxMsg.length - RaftProtocolDefs_1.RICSERIAL_PAYLOAD_POS - RaftProtocolDefs_1.RICREST_HEADER_PAYLOAD_POS;
|
|
121
|
+
RaftLog_1.default.verbose(`_onHDLCFrameDecode RICREST rx binary message elemCode ${ricRestElemCode} len ${binMsgLen} data ${RaftUtils_1.default.bufferToHex(rxMsg)}`);
|
|
122
|
+
if (ricRestElemCode == RaftProtocolDefs_1.RICRESTElemCode.RICREST_ELEM_CODE_FILEBLOCK) {
|
|
123
|
+
const filePos = RaftUtils_1.default.getBEUint32FromBuf(rxMsg, RaftProtocolDefs_1.RICSERIAL_PAYLOAD_POS + RaftProtocolDefs_1.RICREST_HEADER_PAYLOAD_POS + RaftProtocolDefs_1.RICREST_FILEBLOCK_FILEPOS_POS);
|
|
124
|
+
(_a = this._msgResultHandler) === null || _a === void 0 ? void 0 : _a.onRxFileBlock(filePos, rxMsg.slice(RaftProtocolDefs_1.RICSERIAL_PAYLOAD_POS + RaftProtocolDefs_1.RICREST_HEADER_PAYLOAD_POS + RaftProtocolDefs_1.RICREST_FILEBLOCK_PAYLOAD_POS, rxMsg.length));
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// Other message types
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
(_b = this._msgResultHandler) === null || _b === void 0 ? void 0 : _b.onRxOtherMsgType(rxMsg, frameTimeMs);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
_handleResponseMessages(restStr, rxMsgNum) {
|
|
134
|
+
try {
|
|
135
|
+
let msgRsltCode = RaftMsgResultCode.MESSAGE_RESULT_UNKNOWN;
|
|
136
|
+
const msgRsltJsonObj = JSON.parse(restStr);
|
|
137
|
+
if ('rslt' in msgRsltJsonObj) {
|
|
138
|
+
const rsltStr = msgRsltJsonObj.rslt.toLowerCase();
|
|
139
|
+
if (rsltStr === 'ok') {
|
|
140
|
+
RaftLog_1.default.verbose(`_handleResponseMessages RICREST rslt Ok ${rxMsgNum == 0 ? "unnumbered" : "msgNum " + rxMsgNum.toString()} resp ${msgRsltJsonObj.rslt}`);
|
|
141
|
+
msgRsltCode = RaftMsgResultCode.MESSAGE_RESULT_OK;
|
|
142
|
+
}
|
|
143
|
+
else if (rsltStr === 'fail') {
|
|
144
|
+
msgRsltCode = RaftMsgResultCode.MESSAGE_RESULT_FAIL;
|
|
145
|
+
RaftLog_1.default.warn(`_handleResponseMessages RICREST rslt fail ${rxMsgNum == 0 ? "unnumbered" : "msgNum " + rxMsgNum.toString()} resp ${restStr}`);
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
RaftLog_1.default.warn(`_handleResponseMessages RICREST rslt not recognized ${rxMsgNum == 0 ? "unnumbered" : "msgNum " + rxMsgNum.toString()}resp ${restStr}`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
RaftLog_1.default.warn(`_handleResponseMessages RICREST response doesn't contain rslt ${rxMsgNum == 0 ? "unnumbered" : "msgNum " + rxMsgNum.toString()}resp ${restStr}`);
|
|
153
|
+
}
|
|
154
|
+
// Handle matching of request and response
|
|
155
|
+
this.msgTrackingRxRespMsg(rxMsgNum, msgRsltCode, msgRsltJsonObj);
|
|
156
|
+
}
|
|
157
|
+
catch (excp) {
|
|
158
|
+
if (excp instanceof Error) {
|
|
159
|
+
RaftLog_1.default.warn(`_handleResponseMessages Failed to parse JSON ${rxMsgNum == 0 ? "unnumbered" : "msgNum " + rxMsgNum.toString()} JSON STR ${restStr} resp ${excp.toString()}`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
_handleReportMessages(restStr) {
|
|
164
|
+
try {
|
|
165
|
+
const reportMsg = JSON.parse(restStr);
|
|
166
|
+
reportMsg.timeReceived = Date.now();
|
|
167
|
+
RaftLog_1.default.debug(`_handleReportMessages ${JSON.stringify(reportMsg)}`);
|
|
168
|
+
this._reportMsgCallbacks.forEach((callback) => callback(reportMsg));
|
|
169
|
+
}
|
|
170
|
+
catch (excp) {
|
|
171
|
+
if (excp instanceof Error) {
|
|
172
|
+
RaftLog_1.default.warn(`_handleReportMessages Failed to parse JSON report ${excp.toString()}`);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
async sendRICRESTURL(cmdStr, bridgeID = undefined, msgTimeoutMs = undefined) {
|
|
177
|
+
// Send
|
|
178
|
+
return this.sendRICREST(cmdStr, RaftProtocolDefs_1.RICRESTElemCode.RICREST_ELEM_CODE_URL, bridgeID, msgTimeoutMs);
|
|
179
|
+
}
|
|
180
|
+
async sendRICRESTCmdFrame(cmdStr, bridgeID = undefined, msgTimeoutMs = undefined) {
|
|
181
|
+
// Send
|
|
182
|
+
return this.sendRICREST(cmdStr, RaftProtocolDefs_1.RICRESTElemCode.RICREST_ELEM_CODE_COMMAND_FRAME, bridgeID, msgTimeoutMs);
|
|
183
|
+
}
|
|
184
|
+
async sendRICREST(cmdStr, ricRESTElemCode, bridgeID = undefined, msgTimeoutMs = undefined) {
|
|
185
|
+
// Put cmdStr into buffer
|
|
186
|
+
const cmdStrTerm = new Uint8Array(cmdStr.length + 1);
|
|
187
|
+
RaftUtils_1.default.addStringToBuffer(cmdStrTerm, cmdStr, 0);
|
|
188
|
+
cmdStrTerm[cmdStrTerm.length - 1] = 0;
|
|
189
|
+
// Send
|
|
190
|
+
return this.sendRICRESTBytes(cmdStrTerm, ricRESTElemCode, true, bridgeID, msgTimeoutMs);
|
|
191
|
+
}
|
|
192
|
+
async sendRICRESTNoResp(cmdStr, ricRESTElemCode, bridgeID = undefined) {
|
|
193
|
+
// Check there is a sender
|
|
194
|
+
if (!this._msgSender) {
|
|
195
|
+
return false;
|
|
196
|
+
}
|
|
197
|
+
// Put cmdStr into buffer
|
|
198
|
+
const cmdBytes = new Uint8Array(cmdStr.length + 1);
|
|
199
|
+
RaftUtils_1.default.addStringToBuffer(cmdBytes, cmdStr, 0);
|
|
200
|
+
cmdBytes[cmdBytes.length - 1] = 0;
|
|
201
|
+
// Form message
|
|
202
|
+
const cmdMsg = new Uint8Array(cmdBytes.length + RaftProtocolDefs_1.RICREST_HEADER_PAYLOAD_POS);
|
|
203
|
+
cmdMsg[RaftProtocolDefs_1.RICREST_REST_ELEM_CODE_POS] = ricRESTElemCode;
|
|
204
|
+
cmdMsg.set(cmdBytes, RaftProtocolDefs_1.RICREST_HEADER_PAYLOAD_POS);
|
|
205
|
+
// Frame the message
|
|
206
|
+
let framedMsg = this.frameCommsMsg(cmdMsg, RaftProtocolDefs_1.RaftCommsMsgTypeCode.MSG_TYPE_COMMAND, RaftProtocolDefs_1.RaftCommsMsgProtocol.MSG_PROTOCOL_RICREST, true);
|
|
207
|
+
// Wrap if bridged
|
|
208
|
+
if (bridgeID !== undefined) {
|
|
209
|
+
framedMsg = this.bridgeCommsMsg(framedMsg, bridgeID);
|
|
210
|
+
}
|
|
211
|
+
// Encode like HDLC
|
|
212
|
+
const encodedMsg = this._miniHDLC.encode(framedMsg);
|
|
213
|
+
// Send
|
|
214
|
+
if (!await this._msgSender.sendTxMsg(encodedMsg, false)) {
|
|
215
|
+
RaftLog_1.default.warn(`sendRICRESTNoResp failed to send message`);
|
|
216
|
+
this._commsStats.recordMsgNoConnection();
|
|
217
|
+
}
|
|
218
|
+
return true;
|
|
219
|
+
}
|
|
220
|
+
async sendRICRESTBytes(cmdBytes, ricRESTElemCode, withResponse, bridgeID = undefined, msgTimeoutMs = undefined) {
|
|
221
|
+
// Form message
|
|
222
|
+
const cmdMsg = new Uint8Array(cmdBytes.length + RaftProtocolDefs_1.RICREST_HEADER_PAYLOAD_POS);
|
|
223
|
+
cmdMsg[RaftProtocolDefs_1.RICREST_REST_ELEM_CODE_POS] = ricRESTElemCode;
|
|
224
|
+
cmdMsg.set(cmdBytes, RaftProtocolDefs_1.RICREST_HEADER_PAYLOAD_POS);
|
|
225
|
+
// Send
|
|
226
|
+
return this.sendMsgAndWaitForReply(cmdMsg, RaftProtocolDefs_1.RaftCommsMsgTypeCode.MSG_TYPE_COMMAND, RaftProtocolDefs_1.RaftCommsMsgProtocol.MSG_PROTOCOL_RICREST, withResponse, bridgeID, msgTimeoutMs);
|
|
227
|
+
}
|
|
228
|
+
async sendMsgAndWaitForReply(msgPayload, msgDirection, msgProtocol, withResponse, bridgeID = undefined, msgTimeoutMs) {
|
|
229
|
+
// Check there is a sender
|
|
230
|
+
if (!this._msgSender) {
|
|
231
|
+
throw new Error('sendMsgAndWaitForReply failed no sender');
|
|
232
|
+
}
|
|
233
|
+
// Frame the message
|
|
234
|
+
let framedMsg = this.frameCommsMsg(msgPayload, msgDirection, msgProtocol, true);
|
|
235
|
+
// Wrap if bridged
|
|
236
|
+
if (bridgeID !== undefined) {
|
|
237
|
+
framedMsg = this.bridgeCommsMsg(framedMsg, bridgeID);
|
|
238
|
+
// RaftLog.debug(`sendMsgAndWaitForReply - bridged idx ${bridgeID}`)
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
// RaftLog.debug(`sendMsgAndWaitForReply - not bridged`)
|
|
242
|
+
}
|
|
243
|
+
// Encode like HDLC
|
|
244
|
+
const encodedMsg = this._miniHDLC.encode(framedMsg);
|
|
245
|
+
// Debug
|
|
246
|
+
// RaftLog.debug(
|
|
247
|
+
// `sendMsgAndWaitForReply ${RaftUtils.bufferToHex(encodedMsg)}`,
|
|
248
|
+
// );
|
|
249
|
+
// Return a promise that will be resolved when a reply is received or timeout occurs
|
|
250
|
+
const promise = new Promise((resolve, reject) => {
|
|
251
|
+
// Update message tracking
|
|
252
|
+
this.msgTrackingTxCmdMsg(encodedMsg, withResponse, bridgeID, msgTimeoutMs, resolve, reject);
|
|
253
|
+
this._currentMsgHandle++;
|
|
254
|
+
});
|
|
255
|
+
return promise;
|
|
256
|
+
}
|
|
257
|
+
frameCommsMsg(msgPayload, msgDirection, msgProtocol, isNumbered) {
|
|
258
|
+
// Header
|
|
259
|
+
const msgBuf = new Uint8Array(msgPayload.length + RaftProtocolDefs_1.RICSERIAL_PAYLOAD_POS);
|
|
260
|
+
msgBuf[RaftProtocolDefs_1.RICSERIAL_MSG_NUM_POS] = isNumbered ? this._currentMsgNumber & 0xff : 0;
|
|
261
|
+
msgBuf[RaftProtocolDefs_1.RICSERIAL_PROTOCOL_POS] = (msgDirection << 6) + msgProtocol;
|
|
262
|
+
// Payload
|
|
263
|
+
msgBuf.set(msgPayload, RaftProtocolDefs_1.RICSERIAL_PAYLOAD_POS);
|
|
264
|
+
// Return framed message
|
|
265
|
+
return msgBuf;
|
|
266
|
+
}
|
|
267
|
+
bridgeCommsMsg(msgBuf, bridgeID) {
|
|
268
|
+
//
|
|
269
|
+
const bridgedMsg = new Uint8Array(msgBuf.length + RaftProtocolDefs_1.RICREST_BRIDGE_PAYLOAD_POS);
|
|
270
|
+
// Bridged messages are unnumbered (msgNum == 0)
|
|
271
|
+
bridgedMsg[RaftProtocolDefs_1.RICSERIAL_MSG_NUM_POS] = 0;
|
|
272
|
+
bridgedMsg[RaftProtocolDefs_1.RICSERIAL_PROTOCOL_POS] = (RaftProtocolDefs_1.RaftCommsMsgTypeCode.MSG_TYPE_COMMAND << 6) + RaftProtocolDefs_1.RaftCommsMsgProtocol.MSG_PROTOCOL_BRIDGE_RICREST;
|
|
273
|
+
bridgedMsg[RaftProtocolDefs_1.RICREST_BRIDGE_ID_POS] = bridgeID;
|
|
274
|
+
bridgedMsg.set(msgBuf, RaftProtocolDefs_1.RICREST_BRIDGE_PAYLOAD_POS);
|
|
275
|
+
return bridgedMsg;
|
|
276
|
+
}
|
|
277
|
+
msgTrackingTxCmdMsg(msgFrame, withResponse, bridgeID = undefined, msgTimeoutMs, resolve, reject) {
|
|
278
|
+
// Record message re-use of number
|
|
279
|
+
if (this._msgTrackInfos[this._currentMsgNumber].msgOutstanding) {
|
|
280
|
+
this._commsStats.recordMsgNumCollision();
|
|
281
|
+
}
|
|
282
|
+
// Set tracking info
|
|
283
|
+
this._msgTrackInfos[this._currentMsgNumber].set(true, msgFrame, withResponse, bridgeID, this._currentMsgHandle, msgTimeoutMs, resolve, reject);
|
|
284
|
+
// Debug
|
|
285
|
+
RaftLog_1.default.debug(`msgTrackingTxCmdMsg msgNum ${this._currentMsgNumber} bridgeID ${bridgeID} msg ${RaftUtils_1.default.bufferToHex(msgFrame)} msgOutstanding ${this._msgTrackInfos[this._currentMsgNumber].msgOutstanding}`);
|
|
286
|
+
// Stats
|
|
287
|
+
this._commsStats.msgTx();
|
|
288
|
+
// Bump msg number
|
|
289
|
+
if (this._currentMsgNumber == RaftMsgTrackInfo_1.RaftMsgTrackInfo.MAX_MSG_NUM) {
|
|
290
|
+
this._currentMsgNumber = 1;
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
this._currentMsgNumber++;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
msgTrackingRxRespMsg(msgNum, msgRsltCode, msgRsltJsonObj) {
|
|
297
|
+
// Check message number
|
|
298
|
+
if (msgNum == 0) {
|
|
299
|
+
// Callback on unnumbered message
|
|
300
|
+
if (this._msgResultHandler !== null)
|
|
301
|
+
this._msgResultHandler.onRxUnnumberedMsg(msgRsltJsonObj);
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
if (msgNum > RaftMsgTrackInfo_1.RaftMsgTrackInfo.MAX_MSG_NUM) {
|
|
305
|
+
RaftLog_1.default.warn('msgTrackingRxRespMsg msgNum > 255');
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
308
|
+
if (!this._msgTrackInfos[msgNum].msgOutstanding) {
|
|
309
|
+
RaftLog_1.default.warn(`msgTrackingRxRespMsg unmatched msgNum ${msgNum}`);
|
|
310
|
+
this._commsStats.recordMsgNumUnmatched();
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
// Handle message
|
|
314
|
+
RaftLog_1.default.verbose(`msgTrackingRxRespMsg Message response received msgNum ${msgNum}`);
|
|
315
|
+
this._commsStats.recordMsgResp(Date.now() - this._msgTrackInfos[msgNum].msgSentMs);
|
|
316
|
+
this._msgCompleted(msgNum, msgRsltCode, msgRsltJsonObj);
|
|
317
|
+
}
|
|
318
|
+
_msgCompleted(msgNum, msgRsltCode, msgRsltObj) {
|
|
319
|
+
// Lookup message in tracking
|
|
320
|
+
const msgHandle = this._msgTrackInfos[msgNum].msgHandle;
|
|
321
|
+
this._msgTrackInfos[msgNum].msgOutstanding = false;
|
|
322
|
+
// Check if message result handler should be informed
|
|
323
|
+
if (this._msgResultHandler !== null) {
|
|
324
|
+
this._msgResultHandler.onRxReply(msgHandle, msgRsltCode, msgRsltObj);
|
|
325
|
+
}
|
|
326
|
+
// Handle reply
|
|
327
|
+
// if (msgRsltCode === RaftMsgResultCode.MESSAGE_RESULT_OK) {
|
|
328
|
+
const resolve = this._msgTrackInfos[msgNum].resolve;
|
|
329
|
+
if (resolve) {
|
|
330
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
331
|
+
RaftLog_1.default.debug(`_msgCompleted msgNum ${msgNum} result ${msgRsltCode.toString()} ${JSON.stringify(msgRsltObj)}`);
|
|
332
|
+
resolve(msgRsltObj);
|
|
333
|
+
}
|
|
334
|
+
// } else {
|
|
335
|
+
// const reject = this._msgTrackInfos[msgNum].reject;
|
|
336
|
+
// if (reject) {
|
|
337
|
+
// // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
338
|
+
// try {
|
|
339
|
+
// RaftLog.debug(`_msgCompleted reject rsltCode ${msgRsltCode}`);
|
|
340
|
+
// // (reject as any)(new Error(`Message failed msgNum ${msgNum} rslt ${msgRsltCode}`));
|
|
341
|
+
// } catch (excp: unknown) {
|
|
342
|
+
// RaftLog.warn(`_msgCompleted reject ${excp}`);
|
|
343
|
+
// }
|
|
344
|
+
// }
|
|
345
|
+
// }
|
|
346
|
+
// No longer waiting for reply
|
|
347
|
+
this._msgTrackInfos[msgNum].resolve = null;
|
|
348
|
+
this._msgTrackInfos[msgNum].reject = null;
|
|
349
|
+
}
|
|
350
|
+
// Check message timeouts
|
|
351
|
+
async _onMsgTrackTimer(chainRecall) {
|
|
352
|
+
if (this._msgSender !== null) {
|
|
353
|
+
// Handle message tracking
|
|
354
|
+
for (let loopIdx = 0; loopIdx < this._msgTrackInfos.length; loopIdx++) {
|
|
355
|
+
// Index to check
|
|
356
|
+
const checkIdx = this._msgTrackLastCheckIdx;
|
|
357
|
+
this._msgTrackLastCheckIdx = (checkIdx + 1) % this._msgTrackInfos.length;
|
|
358
|
+
// Check if message is outstanding
|
|
359
|
+
if (!this._msgTrackInfos[checkIdx].msgOutstanding)
|
|
360
|
+
continue;
|
|
361
|
+
// Get message timeout and ensure valid
|
|
362
|
+
let msgTimeoutMs = this._msgTrackInfos[checkIdx].msgTimeoutMs;
|
|
363
|
+
if (msgTimeoutMs === undefined) {
|
|
364
|
+
msgTimeoutMs = RaftMsgTrackInfo_1.RaftMsgTrackInfo.MSG_RESPONSE_TIMEOUT_MS;
|
|
365
|
+
}
|
|
366
|
+
// Check for timeout (or never sent)
|
|
367
|
+
if ((this._msgTrackInfos[checkIdx].retryCount === 0) || (Date.now() > this._msgTrackInfos[checkIdx].msgSentMs + (msgTimeoutMs * (this._msgTrackInfos[checkIdx].retryCount)))) {
|
|
368
|
+
// Debug
|
|
369
|
+
RaftLog_1.default.debug(`msgTrackTimer msgNum ${checkIdx} ${this._msgTrackInfos[checkIdx].retryCount === 0 ? 'first send' : 'timeout - retrying'} ${RaftUtils_1.default.bufferToHex(this._msgTrackInfos[checkIdx].msgFrame)}`);
|
|
370
|
+
// RaftLog.verbose(`msgTrackTimer msg ${RaftUtils.bufferToHex(this._msgTrackInfos[i].msgFrame)}`);
|
|
371
|
+
// Handle timeout (or first send)
|
|
372
|
+
if (this._msgTrackInfos[checkIdx].retryCount < RaftMsgTrackInfo_1.RaftMsgTrackInfo.MSG_RETRY_COUNT) {
|
|
373
|
+
this._msgTrackInfos[checkIdx].retryCount++;
|
|
374
|
+
try {
|
|
375
|
+
// Send the message
|
|
376
|
+
if (!await this._msgSender.sendTxMsg(this._msgTrackInfos[checkIdx].msgFrame, this._msgTrackInfos[checkIdx].withResponse)) {
|
|
377
|
+
RaftLog_1.default.warn(`msgTrackTimer Message send failed msgNum ${checkIdx} ${RaftUtils_1.default.bufferToHex(this._msgTrackInfos[checkIdx].msgFrame)}`);
|
|
378
|
+
this._msgCompleted(checkIdx, RaftMsgResultCode.MESSAGE_RESULT_FAIL, null);
|
|
379
|
+
this._commsStats.recordMsgNoConnection();
|
|
380
|
+
}
|
|
381
|
+
// Message sent ok so break here
|
|
382
|
+
break;
|
|
383
|
+
}
|
|
384
|
+
catch (error) {
|
|
385
|
+
RaftLog_1.default.warn(`Retry message failed ${error}`);
|
|
386
|
+
}
|
|
387
|
+
this._commsStats.recordMsgRetry();
|
|
388
|
+
this._msgTrackInfos[checkIdx].msgSentMs = Date.now();
|
|
389
|
+
}
|
|
390
|
+
else {
|
|
391
|
+
RaftLog_1.default.warn(`msgTrackTimer TIMEOUT msgNum ${checkIdx} after ${RaftMsgTrackInfo_1.RaftMsgTrackInfo.MSG_RETRY_COUNT} retries ${RaftUtils_1.default.bufferToHex(this._msgTrackInfos[checkIdx].msgFrame)}`);
|
|
392
|
+
this._msgCompleted(checkIdx, RaftMsgResultCode.MESSAGE_RESULT_TIMEOUT, null);
|
|
393
|
+
this._commsStats.recordMsgTimeout();
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
// Call again if required
|
|
399
|
+
if (chainRecall) {
|
|
400
|
+
setTimeout(async () => {
|
|
401
|
+
this._onMsgTrackTimer(true);
|
|
402
|
+
}, this._msgTrackTimerMs);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
encodeFileStreamBlock(blockContents, blockStart, streamID) {
|
|
406
|
+
// Create entire message buffer (including protocol wrappers)
|
|
407
|
+
const msgBuf = new Uint8Array(blockContents.length + 4 + RaftProtocolDefs_1.RICREST_HEADER_PAYLOAD_POS + RaftProtocolDefs_1.RICSERIAL_PAYLOAD_POS);
|
|
408
|
+
let msgBufPos = 0;
|
|
409
|
+
// RICSERIAL protocol
|
|
410
|
+
msgBuf[msgBufPos++] = 0; // not numbered
|
|
411
|
+
msgBuf[msgBufPos++] =
|
|
412
|
+
(RaftProtocolDefs_1.RaftCommsMsgTypeCode.MSG_TYPE_COMMAND << 6) +
|
|
413
|
+
RaftProtocolDefs_1.RaftCommsMsgProtocol.MSG_PROTOCOL_RICREST;
|
|
414
|
+
// RICREST protocol
|
|
415
|
+
msgBuf[msgBufPos++] = RaftProtocolDefs_1.RICRESTElemCode.RICREST_ELEM_CODE_FILEBLOCK;
|
|
416
|
+
// Buffer header
|
|
417
|
+
msgBuf[msgBufPos++] = streamID & 0xff;
|
|
418
|
+
msgBuf[msgBufPos++] = (blockStart >> 16) & 0xff;
|
|
419
|
+
msgBuf[msgBufPos++] = (blockStart >> 8) & 0xff;
|
|
420
|
+
msgBuf[msgBufPos++] = blockStart & 0xff;
|
|
421
|
+
// Copy block info
|
|
422
|
+
msgBuf.set(blockContents, msgBufPos);
|
|
423
|
+
return msgBuf;
|
|
424
|
+
}
|
|
425
|
+
async sendFileBlock(blockContents, blockStart) {
|
|
426
|
+
const msgBuf = this.encodeFileStreamBlock(blockContents, blockStart, 0);
|
|
427
|
+
// // Debug
|
|
428
|
+
// RaftLog.debug(
|
|
429
|
+
// `sendFileBlock frameLen ${msgBuf.length} start ${blockStart} end ${blockEnd} len ${blockLen}`,
|
|
430
|
+
// );
|
|
431
|
+
// Send
|
|
432
|
+
try {
|
|
433
|
+
// Send
|
|
434
|
+
if (this._msgSender) {
|
|
435
|
+
// Wrap into HDLC
|
|
436
|
+
const framedMsg = this._miniHDLC.encode(msgBuf);
|
|
437
|
+
// Send
|
|
438
|
+
return this._msgSender.sendTxMsg(framedMsg, true);
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
catch (error) {
|
|
442
|
+
RaftLog_1.default.warn(`RaftMsgHandler sendFileBlock error${error}`);
|
|
443
|
+
}
|
|
444
|
+
return false;
|
|
445
|
+
}
|
|
446
|
+
async sendStreamBlock(blockContents, blockStart, streamID) {
|
|
447
|
+
// Ensure any waiting messages are sent first
|
|
448
|
+
await this._onMsgTrackTimer(false);
|
|
449
|
+
// Encode message
|
|
450
|
+
const msgBuf = this.encodeFileStreamBlock(blockContents, blockStart, streamID);
|
|
451
|
+
// // Debug
|
|
452
|
+
// RaftLog.debug(
|
|
453
|
+
// `sendStreamBlock frameLen ${msgBuf.length} start ${blockStart} end ${blockEnd} len ${blockLen}`,
|
|
454
|
+
// );
|
|
455
|
+
// Send
|
|
456
|
+
try {
|
|
457
|
+
// Send
|
|
458
|
+
if (this._msgSender) {
|
|
459
|
+
// Wrap into HDLC
|
|
460
|
+
const framedMsg = this._miniHDLC.encode(msgBuf);
|
|
461
|
+
// Send
|
|
462
|
+
return await this._msgSender.sendTxMsg(framedMsg, true);
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
catch (error) {
|
|
466
|
+
RaftLog_1.default.warn(`RaftMsgHandler sendStreamBlock error${error}`);
|
|
467
|
+
}
|
|
468
|
+
return false;
|
|
469
|
+
}
|
|
470
|
+
async createCommsBridge(bridgeSource, bridgeName, idleCloseSecs = 0) {
|
|
471
|
+
// Establish a bridge
|
|
472
|
+
return await this.sendRICRESTURL(`commandserial/bridge/setup?port=${bridgeSource}&name=${bridgeName}&idleCloseSecs=${idleCloseSecs}`);
|
|
473
|
+
}
|
|
474
|
+
async removeCommsBridge(bridgeID) {
|
|
475
|
+
// Remove a bridge
|
|
476
|
+
return await this.sendRICRESTURL(`commandserial/bridge/remove?id=${bridgeID}`);
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
exports.default = RaftMsgHandler;
|
|
480
|
+
//# sourceMappingURL=RaftMsgHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RaftMsgHandler.js","sourceRoot":"","sources":["../src/RaftMsgHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare class RaftMsgTrackInfo {
|
|
2
|
+
static readonly MAX_MSG_NUM = 255;
|
|
3
|
+
static readonly MSG_RESPONSE_TIMEOUT_MS = 2000;
|
|
4
|
+
static readonly MSG_RETRY_COUNT = 5;
|
|
5
|
+
msgOutstanding: boolean;
|
|
6
|
+
msgFrame: Uint8Array;
|
|
7
|
+
msgSentMs: number;
|
|
8
|
+
retryCount: number;
|
|
9
|
+
withResponse: boolean;
|
|
10
|
+
bridgeID: number | undefined;
|
|
11
|
+
msgHandle: number;
|
|
12
|
+
msgTimeoutMs: number | undefined;
|
|
13
|
+
resolve: unknown;
|
|
14
|
+
reject: unknown;
|
|
15
|
+
constructor();
|
|
16
|
+
set(msgOutstanding: boolean, msgFrame: Uint8Array, withResponse: boolean, bridgeID: number | undefined, msgHandle: number, msgTimeoutMs: number | undefined, resolve: unknown, reject: unknown): void;
|
|
17
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
3
|
+
//
|
|
4
|
+
// RaftMsgTrackInfo
|
|
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
|
+
exports.RaftMsgTrackInfo = void 0;
|
|
13
|
+
class RaftMsgTrackInfo {
|
|
14
|
+
constructor() {
|
|
15
|
+
this.msgOutstanding = false;
|
|
16
|
+
this.msgFrame = new Uint8Array();
|
|
17
|
+
this.msgSentMs = 0;
|
|
18
|
+
this.retryCount = 0;
|
|
19
|
+
this.withResponse = false;
|
|
20
|
+
this.bridgeID = undefined;
|
|
21
|
+
this.msgHandle = 0;
|
|
22
|
+
this.msgTimeoutMs = undefined;
|
|
23
|
+
this.msgOutstanding = false;
|
|
24
|
+
}
|
|
25
|
+
set(msgOutstanding, msgFrame, withResponse, bridgeID = undefined, msgHandle, msgTimeoutMs, resolve, reject) {
|
|
26
|
+
this.msgOutstanding = msgOutstanding;
|
|
27
|
+
this.msgFrame = msgFrame;
|
|
28
|
+
this.retryCount = 0;
|
|
29
|
+
this.msgSentMs = Date.now();
|
|
30
|
+
this.withResponse = withResponse;
|
|
31
|
+
this.bridgeID = bridgeID;
|
|
32
|
+
this.msgHandle = msgHandle;
|
|
33
|
+
this.msgTimeoutMs = msgTimeoutMs;
|
|
34
|
+
this.resolve = resolve;
|
|
35
|
+
this.reject = reject;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
exports.RaftMsgTrackInfo = RaftMsgTrackInfo;
|
|
39
|
+
RaftMsgTrackInfo.MAX_MSG_NUM = 255;
|
|
40
|
+
RaftMsgTrackInfo.MSG_RESPONSE_TIMEOUT_MS = 2000;
|
|
41
|
+
RaftMsgTrackInfo.MSG_RETRY_COUNT = 5;
|
|
42
|
+
//# sourceMappingURL=RaftMsgTrackInfo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RaftMsgTrackInfo.js","sourceRoot":"","sources":["../src/RaftMsgTrackInfo.ts"],"names":[],"mappings":";AAAA,iHAAiH;AACjH,EAAE;AACF,mBAAmB;AACnB,iBAAiB;AACjB,EAAE;AACF,wCAAwC;AACxC,oCAAoC;AACpC,EAAE;AACF,iHAAiH;;;AAEjH,MAAa,gBAAgB;IAe3B;QAXA,mBAAc,GAAG,KAAK,CAAC;QACvB,aAAQ,GAAe,IAAI,UAAU,EAAE,CAAC;QACxC,cAAS,GAAG,CAAC,CAAC;QACd,eAAU,GAAG,CAAC,CAAC;QACf,iBAAY,GAAG,KAAK,CAAC;QACrB,aAAQ,GAAuB,SAAS,CAAC;QACzC,cAAS,GAAG,CAAC,CAAC;QACd,iBAAY,GAAuB,SAAS,CAAC;QAK3C,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;IAC9B,CAAC;IAED,GAAG,CACD,cAAuB,EACvB,QAAoB,EACpB,YAAqB,EACrB,WAA+B,SAAS,EACxC,SAAiB,EACjB,YAAgC,EAChC,OAAgB,EAChB,MAAe;QAEf,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;;AAvCH,4CAwCC;AAvCiB,4BAAW,GAAG,GAAG,AAAN,CAAO;AAClB,wCAAuB,GAAG,IAAI,AAAP,CAAQ;AAC/B,gCAAe,GAAG,CAAC,AAAJ,CAAK"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export declare const RICSERIAL_MSG_NUM_POS = 0;
|
|
2
|
+
export declare const RICSERIAL_PROTOCOL_POS = 1;
|
|
3
|
+
export declare const RICSERIAL_PAYLOAD_POS = 2;
|
|
4
|
+
export declare const RICREST_REST_ELEM_CODE_POS = 0;
|
|
5
|
+
export declare const RICREST_HEADER_PAYLOAD_POS = 1;
|
|
6
|
+
export declare const RICREST_FILEBLOCK_CHANNEL_POS = 0;
|
|
7
|
+
export declare const RICREST_FILEBLOCK_FILEPOS_POS = 0;
|
|
8
|
+
export declare const RICREST_FILEBLOCK_FILEPOS_POS_BYTES = 4;
|
|
9
|
+
export declare const RICREST_FILEBLOCK_PAYLOAD_POS = 4;
|
|
10
|
+
export declare const RICREST_BRIDGE_ID_POS = 2;
|
|
11
|
+
export declare const RICREST_BRIDGE_PAYLOAD_POS = 3;
|
|
12
|
+
export declare enum RICRESTElemCode {
|
|
13
|
+
RICREST_ELEM_CODE_URL = 0,
|
|
14
|
+
RICREST_ELEM_CODE_CMDRESPJSON = 1,
|
|
15
|
+
RICREST_ELEM_CODE_BODY = 2,
|
|
16
|
+
RICREST_ELEM_CODE_COMMAND_FRAME = 3,
|
|
17
|
+
RICREST_ELEM_CODE_FILEBLOCK = 4
|
|
18
|
+
}
|
|
19
|
+
export declare enum RaftCommsMsgTypeCode {
|
|
20
|
+
MSG_TYPE_COMMAND = 0,
|
|
21
|
+
MSG_TYPE_RESPONSE = 1,
|
|
22
|
+
MSG_TYPE_PUBLISH = 2,
|
|
23
|
+
MSG_TYPE_REPORT = 3
|
|
24
|
+
}
|
|
25
|
+
export declare enum RaftCommsMsgProtocol {
|
|
26
|
+
MSG_PROTOCOL_ROSSERIAL = 0,
|
|
27
|
+
MSG_PROTOCOL_RESERVED_1 = 1,
|
|
28
|
+
MSG_PROTOCOL_RICREST = 2,
|
|
29
|
+
MSG_PROTOCOL_BRIDGE_RICREST = 3
|
|
30
|
+
}
|