1.0.4 • Published 3 years ago
websocket-struct v1.0.4
websocket-struct
描述
websocket-struct是一个用于前端和服务器进行WebScoket
纯数据的传输时,用于字节数据与前端数据结构的互相转换的工具库。
安装
# npm
npm install websocket-struct
# cnpm
cnpm install websocket-struct
示例
直接在你需要定义WS数据结构时引入websocket-struct
中的函数即可,然后使用对应的装饰器
:
import { WebSocketStruct, tdWebSocketStruct, ReadWrite, tdWebSocketField, FieldType, BitType } from 'websocket-struct';
@tdWebSocketStruct(ReadWrite.All)
export class LED extends WebSocketStruct {
@tdWebSocketField({ fieldType: FieldType.UInt8 })
mode = 0;
@tdWebSocketField({ fieldType: FieldType.Bit, bitType: BitType.Boolean, length: 1, bitDataFromField: 'mode' })
supportA = false;
@tdWebSocketField({ fieldType: FieldType.Bit, bitType: BitType.Boolean, length: 1, bitDataFromField: 'mode' })
supportB = false;
@tdWebSocketField({ fieldType: FieldType.Bit, bitType: BitType.Boolean, length: 1, bitDataFromField: 'mode' })
supportC = false;
@tdWebSocketField({ fieldType: FieldType.Boolean })
enable = false;
@tdWebSocketField({ fieldType: FieldType.UInt8 })
aTime = 0;
@tdWebSocketField({ fieldType: FieldType.UInt8 })
bTime = 0;
@tdWebSocketField({ fieldType: FieldType.UInt8 })
cTime = 0;
@tdWebSocketField({ fieldType: FieldType.UInt8_Array, arrLength: 3 })
reserved = 0; // 3
}
@tdWebSocketStruct(ReadWrite.All)
export class Light extends WebSocketStruct {
@tdWebSocketField({ fieldType: FieldType.Boolean })
enable = false;
@tdWebSocketField({ fieldType: FieldType.Struct, construct: LED })
micOn = new LED();
@tdWebSocketField({ fieldType: FieldType.UInt8_Array, arrLength: 32 })
reserved = 0;
}
...
// 读数据
const buffer = [...];
const light = new Light();
light.fromBuffer(buffer);
// 写数据
const buffer2 = light.toBuffer();
主要API
装饰器、类:
名字 | 类型 | 描述 |
---|---|---|
tdWebSocketStruct | Function | 装饰器,装饰WS类 |
tdWebSocketField | Function | 装饰器,装饰WS类的字段 |
WebSocketStruct | Class | 所有WS类的父类,所有继承了这个类的子类称为WS类 |
可读写属性:
名字 | 描述 |
---|---|
ReadWrite.Readable | 只读 |
ReadWrite.Writable | 只写 |
ReadWrite.All | 可读写 |
WS类字段的装饰器函数参数的类型TdWebSocketFieldParameter
:
名字 | 类型 | 描述 |
---|---|---|
fieldType | FieldType | 详细可看支持性 |
length | number | 字节长度,number表示指定长度 |
arrLength | number | 数组长度,number表示指定长度,对于*_Array 类型的数据,必需传入此参数 |
arrLengthFromField | string | 指定你要从哪个字段中读取arrLength的值 |
bitDataFromField | string | 指定你要从哪个字段中读取bit数据。当未指定时,将分析字节数据对应的二进制形式。读取多长的字由length决定 |
bitType | BitType | 详细可看支持性 |
reverse | boolean | 对于Boolean 类型的数据,结果是否取反,true-是,false-否 |
construct | Class | 对于Struct 类型的数据,必需传入此参数 |
支持性
FieldType
类型:
名字 | 描述 |
---|---|
UInt8 | 1 byte,无符号 |
UInt16 | 2 bytes,无符号 |
UInt32 | 4 bytes,无符号 |
UInt64 | 8 bytes,无符号 |
UInt8_Array | UInt8数组 |
UInt16_Array | UInt16数组 |
UInt32_Array | UInt32数组 |
UInt64_Array | UInt64数组 |
Int8 | 1 byte,有符号 |
Int16 | 2 bytes,有符号 |
Int32 | 4 bytes,有符号 |
Int64 | 8 bytes,有符号 |
Int8_Array | Int8数组 |
Int16_Array | Int16数组 |
Int32_Array | Int32数组 |
Int64_Array | Int64数组 |
Bit | 1 bit |
Boolean | 布尔值,可以指定reverse |
Boolean_Array | Boolean数组 |
Float32 | 4 bytes,浮点数 |
Float32_Array | Float32数组 |
Float64 | 8 bytes,浮点数 |
Float64_Array | Float64数组 |
Char | ASCII字符串 |
Char_Array | Char数组 |
Utf8Char | UTF-8字符串 |
Utf8Char_Array | Utf8Char数组 |
Struct | 自定义数据结构(WS类) |
Struct_Array | Struct数组 |
BitType
类型:
名字 | 描述 |
---|---|
Number | number类型 |
Boolean | boolean类型 |
特点
- 良好的TS类型提示
- 使用简单,而且支持的数据类型很多
- 减少大量的冗余代码,开发者只需要关心业务
- 减少服务器修改属性后带来的维护成本,前端只需要维护一份model,集中管理