package net import ( "bytes" "encoding/binary" "fmt" "pro2d/common" ) func ParseMsg (data []byte, atEOF bool) (advance int, token []byte, err error) { // 表示我们已经扫描到结尾了 if atEOF && len(data) == 0 { return 0, nil, nil } if !atEOF && len(data) >= common.HEADLEN { //4字节数据包长度 4字节指令 length := int32(0) binary.Read(bytes.NewReader(data[0:4]), binary.BigEndian, &length) if length <= 0 { return 0, nil, fmt.Errorf("length is 0") } if int(length) <= len(data) { return int(length) , data[:int(length)], nil } return 0 , nil, nil } if atEOF { return len(data), data, nil } return 0, nil, nil } func DecodeMsg(data []byte) (*MsgPkg, error) { h := Head{} err := binary.Read(bytes.NewReader(data), binary.BigEndian, &h) if err != nil { return nil, err } return &MsgPkg{ Head: h, Body: data[common.HEADLEN:], },nil }