首次推送

This commit is contained in:
sansen
2026-07-20 19:01:03 +08:00
parent ea01b9cf99
commit ef1bf61f9f
4484 changed files with 937163 additions and 1 deletions
@@ -0,0 +1,70 @@
package transport
import (
"encoding/binary"
"time"
)
type PacketType byte
const (
PacketTypeVoice PacketType = 0
PacketTypeVoiceWhisper PacketType = 1
PacketTypeCommand PacketType = 2
PacketTypeCommandLow PacketType = 3
PacketTypePing PacketType = 4
PacketTypePong PacketType = 5
PacketTypeAck PacketType = 6
PacketTypeAckLow PacketType = 7
PacketTypeInit1 PacketType = 8
)
type PacketFlags byte
const (
PacketFlagFragmented PacketFlags = 0x10
PacketFlagNewProtocol PacketFlags = 0x20
PacketFlagCompressed PacketFlags = 0x40
PacketFlagUnencrypted PacketFlags = 0x80
)
type Packet struct {
ReceivedAt time.Time
Data []byte
GenerationID uint32
ID uint16
ClientID uint16
TypeFlagged byte
}
func (p *Packet) Type() PacketType {
return PacketType(p.TypeFlagged & 0x0F)
}
func (p *Packet) Flags() PacketFlags {
return PacketFlags(p.TypeFlagged & 0xF0)
}
func (p *Packet) IsUnencrypted() bool {
return (p.Flags() & PacketFlagUnencrypted) != 0
}
func (p *Packet) BuildC2SHeader() []byte {
header := make([]byte, 5)
binary.BigEndian.PutUint16(header[0:2], p.ID)
binary.BigEndian.PutUint16(header[2:4], p.ClientID)
header[4] = p.TypeFlagged
return header
}
func (p *Packet) ParseS2CHeader(raw []byte) {
p.ID = binary.BigEndian.Uint16(raw[0:2])
p.TypeFlagged = raw[2]
}
func (p *Packet) ParseC2SHeader(raw []byte) {
p.ID = binary.BigEndian.Uint16(raw[0:2])
p.ClientID = binary.BigEndian.Uint16(raw[2:4])
p.TypeFlagged = raw[4]
}