用于获取原始二进制数据并将其转换为可用消息。这可能包括诸如将数据转换为文本、在完全接收到有用的数据块时发出有用的数据,甚至验证协议等任务。
- cCTalkParser <数据包解析器>
- readlineParser <字符串解析器>
- interByteTimeoutParser <数超时字节解析器>
- dataPackager
- xorCheck
- abToHexArr
- hexArrToAb
- strToAb
- hex2int
- hexArrToIntArr
- bufferToAb
缓冲并在指定时间内未接收任何字节或达到最大缓冲区大小后发出数据
const options = {
interval: 100, // 等待毫秒数
maxBufferSize: 1024, // 缓冲区大小
};
interByteTimeoutParser(
buffer,
(res) => {
// 100毫秒内没有再次调用此方法 将会执行一次这里
// 缓冲区满 将会执行一次这里
const str = readlineParser(res);
console.log(str);
},
options
);将带有帧头、操作码、帧长度、帧尾的数据包转换为可用数据
| 帧头 | 帧头 | 操作码 | 数据长度 | 数据 | 校验位 | 帧尾 | 帧尾 |
|---|---|---|---|---|---|---|---|
| 5c | 5a | 00 | 帧头之后帧尾之前的数据长度 | 长度不定 | 帧头开始校验位之前 | 0d | 0a |
<Buffer 5c 5a 00 07 0f 0d 05 07 2d 20 36 3a 0d 0a>
转换为
[{"operationCode":0,"data":[15,13,5,7,45,32,54]}]
const operationCode = 0; //操作码
const buffer = dataPackager([15, 13, 5, 7, 45, 32, 54], operationCode);
// => <Buffer 5c 5a 00 07 0f 0d 05 07 2d 20 36 3a 0d 0a>
const data = cCTalkParser(buffer);
console.log(data);
// => [{"operationCode":0,"data":[15,13,5,7,45,32,54]}]将 <Buffer 43 4f 4e 4e 45 43 54 0d 0a>
转换为字符串: CONNECT,CONNECT
const buffer = Buffer.from('CONNECT\r\nCONNECT\r\n');
const str = readlineParser(buffer, {
delimiter: '\r\n', // 换行符
includeDelimiter: false, // 返回结果是否包含换行符
separator: ',', // 分隔符
});
console.log(str); // => CONNECT,CONNECT为数组添加上帧头、操作码、数据长度、校验位、帧尾 并返回 Buffer
const operationCode = 5; //操作码
const buffer = dataPackager([15, 13, 5, 7, 45, 32, 54], operationCode);
// => <Buffer 5c 5a 00 07 0f 0d 05 07 2d 20 36 3a 0d 0a>异或校验计算
const arr = [15, 13, 5, 7, 45, 32, 54];
const xor = xor(arr);
// => 3a