Packet
概述
组包库接口,提供几个协议的组包接口,还有相关的粘包和分包处理。标准协议有Modbus、HJ212、MQTT,另外一个Simple协议是易传平台用到的一个简单协议。
常量
MQTT消息类型
所有MQTT消息类型定义:
Packet.MQTT.CONNECT
Packet.MQTT.CONNACK
Packet.MQTT.PUBLISH
Packet.MQTT.PUBACK
Packet.MQTT.PUBREC
Packet.MQTT.PUBREL
Packet.MQTT.PUBCOMP
Packet.MQTT.SUBSCRIBE
Packet.MQTT.SUBACK
Packet.MQTT.UNSUBSCRIBE
Packet.MQTT.UNSUBACK
Packet.MQTT.PINGREQ
Packet.MQTT.PINGRESP
Packet.MQTT.DISCONNECT
以上常量与MQTT协议的定义一致,即分别对应1~14。
Simple协议
Simple协议是易传平台用到的一个简单协议,具体内容详见物联网通用设备接口协议文档。
函数
Parser.create
创建一个Simple协议的解析对象,一般需要赋给一个全局变量,以便保持一个不断解析数据的生命周期。
Packet.Simple.Parser.create(callback [,buflen [,header]])
参数 必选 类型 说明 callback true function 解析到一个完整包进的处理回调函数,格式为function cb(data),data为数据主体,类型为Bytes buflen false int 解析数据包的缓冲区大小,一般为数据包主体可能的最大长度,默认为512字节 header false int 一个字节的协议头,默认为0xEA return Object 用于持续解析数据包的对象
parse
解析一包数据,本函数为上面方法创建的对象的方法。
parserObject.parse(data)
参数 必选 类型 说明 data true Bytes 接收到的数据 return null 无返回
packet
组一个Simple协议包。
Packet.Simple.packet(data_string | data_bytes [,header])
参数 必选 类型 说明 data_string true String 数据段主体的字符串 data_bytes true Bytes 数据段主体的字节流 header false int 一个字节的协议头,默认为0xEA return bytes 完整的协议包字节流
isValid
判断一个数据包是否是有效的Simple协议包。
Packet.Simple.isValid(data [,header])
参数 必选 类型 说明 data true bytes 要判断的数据包 header false int 一个字节的协议头,默认为0xEA return bool true,有效;false, 无效
Modbus协议
Modbus协议的相关方法,本协议没有特定包头,所以没有粘包和分包的处理,每次解析都当一个协议包处理,所以不需要缓冲区。
函数
Parser.create
创建一个Modbus协议的解析器对象,一般需要赋给一个全局变量,以便保持一个不断解析数据的生命周期。有时从机回复时会分包,使用本解析器会自动合包。
Packet.Modbus.Parser.create(callback [,buflen])
参数 必选 类型 说明 callback true function 解析到一个完整包进的处理回调函数,格式为function cb(data),data是一个对象,有三个属性:"addr",地址,类型为int;"cmd",功能码,类型为int;"data",数据,类型为Bytes buflen false int 解析数据包的缓冲区大小,一般为数据包主体可能的最大长度,默认为512字节 return Object 用于持续解析数据包的对象
parse
解析一包数据,本函数为上面方法创建的对象的方法。
parserObject.parse(data)
参数 必选 类型 说明 data true Bytes 接收到的数据 return null 无返回
packet
组一个Modbus协议包,有常见四种格式。其他格式需要自己组包,参见Modbus例子
Packet.Modbus.packet(addr, cmd, code)
Packet.Modbus.packet(addr, cmd, data)
Packet.Modbus.packet(addr, cmd, reg, count)
Packet.Modbus.packet(addr, cmd, reg, count, data)
参数 必选 类型 说明 addr true int 一个字节的设备地址 cmd true int 一个字节的功能码 code false int 错误码,一般用于从机返回错误码 data false Bytes 数据,一般格式化为一个字节的长度加数据本身字节流 reg false int 要操作的起始寄存器地址 count false int 要操作的寄存器个数 return bytes 完整的协议包字节流
isValid
判断一个数据包是否是有效的Modbus协议包。
Packet.Modbus.isValid(data)
参数 必选 类型 说明 data true bytes 要判断的数据包 return bool true,有效;false, 无效
HJ212协议
HJ212协议的相关方法。
函数
Parser.create
创建一个HJ212协议的解析对象,一般需要赋给一个全局变量,以便保持一个不断解析数据的生命周期。
Packet.HJ212.Parser.create(callback [,buflen])
参数 必选 类型 说明 callback true function 解析到一个完整包进的处理回调函数,格式为function cb(data),data是数据段主体,类型为String buflen false int 解析数据包的缓冲区大小,一般为数据包主体可能的最大长度,默认为1024字节 return Object 用于持续解析数据包的对象
parse
解析一包数据,本函数为上面方法创建的对象的方法。
parserObject.parse(data)
参数 必选 类型 说明 data true Bytes 接收到的数据 return null 无返回
packet
组一个HJ212协议包。
Packet.HJ212.packet(data)
参数 必选 类型 说明 data true String 数据段主体 return String 完整的协议包字符串
isValid
判断一个数据包是否是有效的HJ212协议包。
Packet.HJ212.isValid(data_string | data_bytes)
参数 必选 类型 说明 data_string true String 要判断的数据包 data_bytes true Bytes 要判断的数据包 return bool true,有效;false, 无效
MQTT协议
MQTT协议的相关方法,主要实现MQTT 3.1.1客户端的方法。目前不支持编码,不支持TLS传输。
函数
Parser.create
创建一个MQTT协议的解析对象,一般需要赋给一个全局变量,以便保持一个不断解析数据的生命周期。
Packet.MQTT.Parser.create(callback [,buflen])
参数 必选 类型 说明 callback true function 解析到一个完整包进的处理回调函数,格式为function cb(data),data是一个对象,其中必包含属性“type",协议包的消息类型,值为常量MQTT消息类型之一;其他属性见下面回调对象说明 buflen false int 解析数据包的缓冲区大小,一般为数据包主体可能的最大长度,默认为512字节 return Object 用于持续解析数据包的对象
回调对象说明
消息类型 属性 类型 说明 CONNACK present int session present code int return code PUBLISH qos int qos dup int dup retain int retain topic String 主题 id int 包id,qos大于0时有效 body Bytes 消息主体 PUBACK id int 包id PUBREC id int 包id PUBREL id int 包id PUBCOMP id int 包id SUBACK id int 包id SUBACK code Array 整数数组,每个值对应每个订阅主题的结果 UNSUBACK id int 包id PINGRESP 无 无 无其他属性 特殊情况 data bytes 为了处理可能未识别的情况,如为其他消息类型,或识别格式不正确,均把数据返回,用户自行解析
parse
解析一包数据,本函数为上面方法创建的对象的方法。
parserObject.parse(data)
参数 必选 类型 说明 data true Bytes 接收到的数据 return null 无返回
packet
组一个MQTT协议包,主要用于扩展。
Packet.MQTT.packet(type, data [,qos [,dup [,retain]]])
参数 必选 类型 说明 type true int 消息类型 data true Bytes 数据段主体 qos false int qos,默认为0 dup false int dup,默认为0 retain false int retain,默认为0 return Bytes 完整的协议包字节流
connect
组一个MQTT CONNECT协议包。
Packet.MQTT.connect(clientid [,keepalive [,clearsession [,username [,password]]]])
参数 必选 类型 说明 clientid true String 客户端ID keepalive false int 客户端发包之间的最大时间间隔,默认为0 clearsession false int 清除会话,默认为1 username false String 用户名,默认无 password false String 密码,默认无 return Bytes 完整的协议包字节流
disconnect
组一个MQTT DISCONNECT协议包。
Packet.MQTT.disconnect()
参数 必选 类型 说明 return Bytes 完整的协议包字节流
ping
组一个MQTT PINGREQ协议包。
Packet.MQTT.ping()
参数 必选 类型 说明 return Bytes 完整的协议包字节流
subscribe
组一个MQTT SUBSCRIBE协议包。
Packet.MQTT.subscribe(id, topic1, qos1, [,topic2, qos2 [,...]])
参数 必选 类型 说明 id true int 包id topic1 true String 订阅的主题1 qos1 true int 订阅的qos1 topic2 false String 订阅的主题2到主题n,与qos参数必须成对使用 qos2 false int 订阅的qos 2到qos n return Bytes 完整的协议包字节流
unsubscribe
组一个MQTT UNSUBSCRIBE协议包。
Packet.MQTT.unsubscribe(id, topic1, [,topic2, [,...]])
参数 必选 类型 说明 id true int 包id topic1 true String 取消订阅的主题1 topic2 false String 取消订阅的主题2到主题n return Bytes 完整的协议包字节流
publish
组一个MQTT PUBLISH协议包。
Packet.MQTT.publish(topic, [body, [,qos, [,id [,dup [,retain]]]])
参数 必选 类型 说明 topic true String 发布消息的主题 body false String或Bytes 发布消息的主体 qos false int qos id false int qos大于0时有效,qos为0时用任意值 dup false String dup retain false String retain return Bytes 完整的协议包字节流
puback
组一个MQTT PUBACK协议包。
Packet.MQTT.puback(id)
参数 必选 类型 说明 id true int 包id return Bytes 完整的协议包字节流
pubrec
组一个MQTT PUBREC协议包。
Packet.MQTT.pubrec(id)
参数 必选 类型 说明 id true int 包id return Bytes 完整的协议包字节流
pubrel
组一个MQTT PUBREL协议包。
Packet.MQTT.pubrel(id)
参数 必选 类型 说明 id true int 包id return Bytes 完整的协议包字节流
pubcomp
组一个MQTT PUBCOMP协议包。
Packet.MQTT.pubcomp(id)
参数 必选 类型 说明 id true int 包id return Bytes 完整的协议包字节流
isValid
判断一个数据包是否是有效的MQTT协议包。
Packet.MQTT.isValid(data)
参数 必选 类型 说明 data true Bytes 要判断的数据包 return bool true,有效;false, 无效
HTTP协议
实现简单的HTTP协议,适合处理一些交互接口,不适合网页和文件的传输。
函数
Parser.create
创建一个HTTP回应的解析对象,一般需要赋给一个全局变量,以便保持一个不断解析数据的生命周期。
Packet.HTTP.Parser.create(callback [,buflen])
参数 必选 类型 说明 callback true function 解析到一个回应包的处理回调函数,格式为function cb(data),data为对象,有code、header、body几个属性 buflen false int 解析数据包的缓冲区大小,一般为数据包主体可能的最大长度,默认为1024字节,超出缓冲区的内容将被截断,长度应该比header部分的长度长 return Object 用于持续解析数据包的对象
parse
解析一包数据,本函数为上面方法创建的对象的方法。
parserObject.parse(data)
参数 必选 类型 说明 data true Bytes 接收到的数据 return null 无返回
packet
组一个HTTP请求包。
Packet.HTTP.packet(method, host, uri [,body_string | body_bytes [,contentType [,keepAlive]]])
参数 必选 类型 说明 method true String 请求的方法,一般用"GET"或"POST" host true String 请求目标服务器,一般用服务器域名或IP uri true String 请求的地址 body_string false String 请求的主体,method为"POST"时有效 body_bytes false Bytes 请求的主体,method为"POST"时有效 contentType false String 请求主体的类型,method为"POST"时有效,默认值为"application/x-www-form-urlencoded" keepAlive false int 是否保持连接,0是不保持连接,1是保持连接,默认值为1 return bytes 完整的协议包字节流