43 lines
1.8 KiB
Markdown
43 lines
1.8 KiB
Markdown
# sdlan交互协议
|
||
sdlan协议的总体格式如下:
|
||
|
||
```
|
||
+-----------+------------+--------+----------+
|
||
| 2字节的长度 | 2字节消息id | 消息头 | 消息体 |
|
||
+-----------+------------+--------+----------+
|
||
```
|
||
|
||
## 长度
|
||
2字节长度包含后面的所有字节的长度(不包括自身)
|
||
|
||
## 消息id
|
||
用于匹配请求和响应,占用2字节,目前可以都先填写0
|
||
|
||
## 消息头
|
||
在sdlan中,有一个common头使用二进制协议,消息头主要包含了协议版本,消息来源id(从哪个节点发出的节点标识),消息ttl,以及一些协议的flag(flag标志以后可以扩充)
|
||
|
||
消息头二进制格式如下:
|
||
|
||
```
|
||
+---------+----+-----+------+-----+
|
||
| version | id | ttl | flag | pc |
|
||
+---------+----+-----+------+-----+
|
||
```
|
||
|
||
其中,version占用一个字节,用于标识协议版本。id用于唯一标识某个客户端,为长度为32字节的uuid,之后的ttl占用一个字节,当ttl为0,则直接丢弃该数据包。后面的flag占用2字节,用于标识数据包属性,目前拥有的标识如下:
|
||
|
||
* `from_sn`: `0x0020`,表示这个数据包是从服务端发送过来的。
|
||
* `socket`: `0x0040`,表示这个数据包里面包含了socket信息(待定,因为后面实际的数据包使用了json,这个标识应该没用了)。
|
||
|
||
最后的pc表示后面数据包的类型,目前数据包类型如下:
|
||
|
||
* `0` —— `invalid pkt type`,表示无效的数据包类型
|
||
* `1` —— `register super`,表示客户端像服务端发送的注册请求
|
||
* ... TODO
|
||
|
||
## 消息体
|
||
消息提根据协议头中的pc不同,拥有不同的结构,结构体在json化之后,添加到消息体的位置。
|
||
|
||
### RegisterSuper
|
||
`register super`,表示客户端像服务端发送的注册请求,该请求每隔15-20秒发送一次
|