代码拉取完成,页面将自动刷新
package Receivers
import "gitee.com/ling-bin/network/netInterface"
//SpliceStartFinishManyReceiver 开始结束分包器,多字节【jt808适用】
type SpliceStartFinishManyReceiver struct {
startSymbol []byte
startSymbolsLen int
finishSymbol []byte
finishSymbolsLen int
}
// NewSpliceStartFinishManyReceiver 按照开始结束符来粘包
func NewSpliceStartFinishManyReceiver(startSymbol []byte, finishSymbol []byte) *SpliceStartFinishManyReceiver {
return &SpliceStartFinishManyReceiver{
startSymbol: startSymbol,
startSymbolsLen: len(startSymbol),
finishSymbol: finishSymbol,
finishSymbolsLen: len(finishSymbol),
}
}
//GetHeadLen 包头必须要的长度
func (s *SpliceStartFinishManyReceiver) GetHeadLen() int {
return s.startSymbolsLen + s.finishSymbolsLen
}
//CanHandle 是否能处理
func (s *SpliceStartFinishManyReceiver) CanHandle(conn netInterface.IConnection, buffer []byte) bool {
isOk := true
for i := 0; i < s.startSymbolsLen; i++ {
if s.startSymbol[i] != buffer[i] {
isOk = false
}
}
return isOk
}
//Reset 重置分包状态为初始状态
func (s *SpliceStartFinishManyReceiver) Reset() {
}
//Receiver 分包处理
func (s *SpliceStartFinishManyReceiver) Receiver(conn netInterface.IConnection, buffer []byte) ([]byte, int) {
var (
bfLen = len(buffer)
startIndex = -1
startOkLen = 0
endOkLen = 0
isStart = false
)
for i := 0; i < bfLen; i++ {
if !isStart {
if buffer[i] == s.startSymbol[startOkLen] {
startOkLen++
if startOkLen == s.startSymbolsLen {
isStart = true
startIndex = i
}
} else {
isStart = false
}
} else {
if buffer[i] == s.finishSymbol[endOkLen] {
endOkLen++
if endOkLen == s.finishSymbolsLen {
hData := buffer[startIndex : i+1]
startIndex = i + 1
return hData, i + 1
}
}
}
}
return nil, startIndex
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。