packet

package
v0.0.0-...-31b8b83 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 8, 2026 License: MIT Imports: 6 Imported by: 0

Documentation

Index

Constants

View Source
const (
	LittleEndian endianMode = 0 // 小端-模式
	BigEndian    endianMode = 1 // 大端-模式
)
View Source
const HeaderLengthFieldSize uint32 = 4 // 包头-总长度-字段 的 大小
View Source
const HeaderSize uint32 = 24

Variables

Functions

func AddPacketToData

func AddPacketToData(data []byte, packet IPacket) ([]byte, error)

AddPacketToData 将数据 packet 放到 data 中

func IsBigEndian

func IsBigEndian() bool

IsBigEndian 是否为大端模式

func IsLittleEndian

func IsLittleEndian() bool

IsLittleEndian 是否为小端模式

func SetEndianMode

func SetEndianMode(mode endianMode)

Types

type Header struct {
	Length    uint32 // 总包长度,包含包头+包体长度
	MessageID uint32 // 命令
	SessionID uint32 // 会话id
	ResultID  uint32 // 结果id
	Key       uint64
}

Header 包头

func NewHeader

func NewHeader() *Header

NewHeader 新建包头

func (*Header) Pack

func (p *Header) Pack() []byte

Pack 打包包头, 会分配包头中长度的空间

func (*Header) Unpack

func (p *Header) Unpack(data []byte)

type HeaderMode

type HeaderMode int

包头-模式

const (
	HeaderModeLengthFirst               HeaderMode = 0 // 长度在前, 长度的值,包含Length字段自身
	HeaderModeMessageIDFirst            HeaderMode = 1 // 消息ID在前
	HeaderModeLengthFirst_WithoutLength HeaderMode = 2 // 长度在前, 长度的值,不包含Length字段自身
)

type IHeader

type IHeader interface {
	Pack() []byte  // 将 成员变量 -> data 中
	Unpack([]byte) // 将 data 数据 -> 成员变量中
}

type IHeaderStrategy

type IHeaderStrategy interface {
	GetHeaderMode() HeaderMode         // 获取包头模式
	GetLengthSize() uint32             // 消息体长度 的大小
	UnpackLength(buf []byte) uint32    // 解析消息体长度
	UnpackMessageID(buf []byte) uint32 // 解析消息ID
}

消息头策略

type IHeaderStrategyMessageIDFirst

type IHeaderStrategyMessageIDFirst interface {
	GetLengthSizeByMessageID(messageID uint32) uint32 // 根据消息ID,获取消息体长度 的大小
	GetMessageIDSize() uint32                         // 消息ID 的长度
}

消息头策略-消息ID优先

type IPacket

type IPacket interface {
	// Marshal 序列化
	Marshal() (data []byte, err error)
}

IPacket 接口-数据包

type Packet

type Packet struct {
	Header    *Header           // 包头
	PBMessage proto.Message     // 消息
	IMessage  xmessage.IMessage // 记录该包对应的处理消息
}

Packet 数据包

func NewPacket

func NewPacket() *Packet

NewPacket 新建数据包

func (*Packet) Marshal

func (p *Packet) Marshal() (data []byte, err error)

func (*Packet) WithHeader

func (p *Packet) WithHeader(header *Header) *Packet

func (*Packet) WithIMessage

func (p *Packet) WithIMessage(iMessage xmessage.IMessage) *Packet

func (*Packet) WithPBMessage

func (p *Packet) WithPBMessage(pb proto.Message) *Packet

type PacketPassThrough

type PacketPassThrough struct {
	Header  *Header // 包头
	RawData []byte  // 原始数据(包头+包体)
}

PacketPassThrough 透传数据包

func NewPacketPassThrough

func NewPacketPassThrough() *PacketPassThrough

NewPacketPassThrough 新建-透传数据包

func (*PacketPassThrough) Marshal

func (p *PacketPassThrough) Marshal() (data []byte, err error)

func (*PacketPassThrough) WithHeader

func (p *PacketPassThrough) WithHeader(header *Header) *PacketPassThrough

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL