eq2go/internal/udp/packet.go

55 lines
1020 B
Go

package udp
import (
"encoding/binary"
"errors"
)
type ProtocolPacket struct {
Opcode uint8
Data []byte
}
type ApplicationPacket struct {
Opcode uint16
Data []byte
}
func ParseProtocolPacket(data []byte) (*ProtocolPacket, error) {
if len(data) < 2 {
return nil, errors.New("packet too small")
}
return &ProtocolPacket{
Opcode: data[1],
Data: data[2:],
}, nil
}
func (p *ProtocolPacket) Serialize() []byte {
data := make([]byte, 2+len(p.Data))
data[0] = 0x00 // Reserved byte
data[1] = p.Opcode
copy(data[2:], p.Data)
return data
}
func ParseApplicationPacket(data []byte) (*ApplicationPacket, error) {
if len(data) < 2 {
return nil, errors.New("application packet too small")
}
opcode := binary.LittleEndian.Uint16(data[0:2])
return &ApplicationPacket{
Opcode: opcode,
Data: data[2:],
}, nil
}
func (p *ApplicationPacket) Serialize() []byte {
data := make([]byte, 2+len(p.Data))
binary.LittleEndian.PutUint16(data[0:2], p.Opcode)
copy(data[2:], p.Data)
return data
}