1.0.4 • Published 3 years ago

websocket-struct v1.0.4

Weekly downloads
7
License
ISC
Repository
-
Last release
3 years ago

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

装饰器、类:

名字类型描述
tdWebSocketStructFunction装饰器,装饰WS类
tdWebSocketFieldFunction装饰器,装饰WS类的字段
WebSocketStructClass所有WS类的父类,所有继承了这个类的子类称为WS类

可读写属性:

名字描述
ReadWrite.Readable只读
ReadWrite.Writable只写
ReadWrite.All可读写

WS类字段的装饰器函数参数的类型TdWebSocketFieldParameter

名字类型描述
fieldTypeFieldType详细可看支持性
lengthnumber字节长度,number表示指定长度
arrLengthnumber数组长度,number表示指定长度,对于*_Array类型的数据,必需传入此参数
arrLengthFromFieldstring指定你要从哪个字段中读取arrLength的值
bitDataFromFieldstring指定你要从哪个字段中读取bit数据。当未指定时,将分析字节数据对应的二进制形式。读取多长的字由length决定
bitTypeBitType详细可看支持性
reverseboolean对于Boolean类型的数据,结果是否取反,true-是,false-否
constructClass对于Struct类型的数据,必需传入此参数

支持性

FieldType类型:

名字描述
UInt81 byte,无符号
UInt162 bytes,无符号
UInt324 bytes,无符号
UInt648 bytes,无符号
UInt8_ArrayUInt8数组
UInt16_ArrayUInt16数组
UInt32_ArrayUInt32数组
UInt64_ArrayUInt64数组
Int81 byte,有符号
Int162 bytes,有符号
Int324 bytes,有符号
Int648 bytes,有符号
Int8_ArrayInt8数组
Int16_ArrayInt16数组
Int32_ArrayInt32数组
Int64_ArrayInt64数组
Bit1 bit
Boolean布尔值,可以指定reverse
Boolean_ArrayBoolean数组
Float324 bytes,浮点数
Float32_ArrayFloat32数组
Float648 bytes,浮点数
Float64_ArrayFloat64数组
CharASCII字符串
Char_ArrayChar数组
Utf8CharUTF-8字符串
Utf8Char_ArrayUtf8Char数组
Struct自定义数据结构(WS类)
Struct_ArrayStruct数组

BitType类型:

名字描述
Numbernumber类型
Booleanboolean类型

特点

  • 良好的TS类型提示
  • 使用简单,而且支持的数据类型很多
  • 减少大量的冗余代码,开发者只需要关心业务
  • 减少服务器修改属性后带来的维护成本,前端只需要维护一份model,集中管理
1.0.4

3 years ago

1.0.3

3 years ago

1.0.2

3 years ago

1.0.1

4 years ago

1.0.0

4 years ago