代码拉取完成,页面将自动刷新
同步操作将从 coco/go808 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
package protocol
import (
"bytes"
"compress/gzip"
"fmt"
"io"
)
// 数据压缩上报
type T808_0x0901 struct {
// 未压缩消息
Uncompressed []byte
}
func (entity *T808_0x0901) MsgID() MsgID {
return MsgT808_0x0901
}
func (entity *T808_0x0901) Encode() ([]byte, error) {
// 压缩消息
buffer := bytes.NewBuffer(nil)
gzipWriter := gzip.NewWriter(buffer)
gzipWriter.Write(entity.Uncompressed)
gzipWriter.Close()
// 写入消息长度
writer := NewWriter()
writer.WriteUint32(uint32(buffer.Len()))
// 写入压缩消息
fmt.Println(len(entity.Uncompressed))
writer.Write(buffer.Bytes())
return writer.Bytes(), nil
}
func (entity *T808_0x0901) Decode(data []byte) (int, error) {
if len(data) < 4 {
return 0, ErrInvalidBody
}
reader := NewReader(data)
// 读取消息长度
size, err := reader.ReadUint32()
if err != nil {
return 0, err
}
// 读取压缩消息
compressed, err := reader.Read(int(size))
if err != nil {
return 0, err
}
// 解压缩消息
buffer := bytes.NewBuffer(nil)
gzipReader, err := gzip.NewReader(bytes.NewReader(compressed))
if err != nil {
return 0, err
}
defer gzipReader.Close()
var temp [256]byte
for {
n, err := gzipReader.Read(temp[:])
if err != nil && err != io.EOF {
break
}
if n > 0 {
buffer.Write(temp[:n])
}
if err == io.EOF {
break
}
}
entity.Uncompressed = buffer.Bytes()
return len(data) - reader.Len(), nil
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。