|
|
package unpacker
|
|
|
|
|
|
// Unpacker 拆包器接口
|
|
|
type Unpacker interface {
|
|
|
// Unpack 拆包
|
|
|
// data: 原始数据
|
|
|
// 返回: 完整的消息列表, 剩余数据, 本次从输入data中消耗的字节数, 错误
|
|
|
// consumed: 本次从输入data中消耗的字节数,用于准确计算从gnet buffer中需要discard的数据量
|
|
|
Unpack(data []byte) ([][]byte, []byte, int, error)
|
|
|
|
|
|
// Pack 打包
|
|
|
// data: 要打包的数据
|
|
|
// 返回: 打包后的数据, 错误
|
|
|
Pack(data []byte) ([]byte, error)
|
|
|
}
|
|
|
|
|
|
// 默认最大buffer大小(10MB)
|
|
|
const DefaultMaxBufferSize = 10 * 1024 * 1024
|
|
|
|
|
|
// FixedLengthUnpacker 固定长度拆包器
|
|
|
type FixedLengthUnpacker struct {
|
|
|
Length int
|
|
|
MaxBufferSize int // 最大buffer大小,0表示使用默认值
|
|
|
}
|
|
|
|
|
|
// LengthFieldUnpacker 长度字段拆包器
|
|
|
type LengthFieldUnpacker struct {
|
|
|
LengthFieldOffset int // 长度字段偏移
|
|
|
LengthFieldLength int // 长度字段长度(1, 2, 4, 8)
|
|
|
LengthAdjustment int // 长度调整(长度字段值 + 调整值 = 实际长度)
|
|
|
InitialBytesToStrip int // 需要跳过的初始字节数
|
|
|
MaxBufferSize int // 最大buffer大小,0表示使用默认值
|
|
|
}
|
|
|
|
|
|
// DelimiterUnpacker 分隔符拆包器
|
|
|
type DelimiterUnpacker struct {
|
|
|
Delimiter []byte
|
|
|
MaxBufferSize int // 最大buffer大小,0表示使用默认值
|
|
|
}
|
|
|
|
|
|
// FrameHeaderUnpacker 帧头拆包器
|
|
|
type FrameHeaderUnpacker struct {
|
|
|
HeaderLength int // 帧头长度
|
|
|
GetLength func(header []byte) int // 从帧头获取消息长度
|
|
|
MaxBufferSize int // 最大buffer大小,0表示使用默认值
|
|
|
}
|
|
|
|