common

package
v0.0.0-...-80248e1 Latest Latest
Warning

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

Go to latest
Published: Dec 17, 2025 License: MIT Imports: 8 Imported by: 0

Documentation

Index

Constants

View Source
const (
	EventAddTimeoutDuration = 3 * time.Second // 事件-加入的超时时间
)
View Source
const ServerNetTypeNameKCP = "kcp"
View Source
const ServerNetTypeNameTCP = "tcp"
View Source
const ServerNetTypeNameWebSocket = "websocket"

Variables

This section is empty.

Functions

func UpdateWriteDeadline

func UpdateWriteDeadline(conn net.Conn, lastTime *time.Time, thisTime time.Time, writeTimeOutDuration time.Duration) error

写超时

只有超过50%时才更新写截止日期
参数:
	lastTime:上次时间 (可能会更新)
	thisTime:这次时间
	writeTimeOutDuration:写超时时长

Types

type ConnOptions

type ConnOptions struct {
	ReadBuffer  *int // readBuffer sets the size of the operating system's receive buffer associated with the connection. [default]: 1024*1024/系统默认
	WriteBuffer *int // writeBuffer sets the size of the operating system's transmit buffer associated with the connection. [default]: 1024*1024/系统默认
}

func NewConnOptions

func NewConnOptions() *ConnOptions

NewConnOptions 新的ConnOptions

func (*ConnOptions) Configure

func (p *ConnOptions) Configure() error

func (*ConnOptions) Merge

func (p *ConnOptions) Merge(opts ...*ConnOptions) *ConnOptions

func (*ConnOptions) WithReadBuffer

func (p *ConnOptions) WithReadBuffer(readBuffer int) *ConnOptions

func (*ConnOptions) WithWriteBuffer

func (p *ConnOptions) WithWriteBuffer(writeBuffer int) *ConnOptions

type Connect

type Connect struct {
	IHandler IHandler
	IRemote  IRemote
}

Connect 事件数据-链接成功

type DefaultRemote

type DefaultRemote struct {
	SendChan         chan any // 发送管道
	CancelFunc       context.CancelFunc
	Object           any              // 保存 应用层数据
	DisconnectReason DisconnectReason // 断开原因
	HeaderStrategy   xpacket.IHeaderStrategy
	PacketLimit      IPacketLimit
}

func (*DefaultRemote) GetDisconnectReason

func (p *DefaultRemote) GetDisconnectReason() DisconnectReason

func (*DefaultRemote) IsOverload

func (p *DefaultRemote) IsOverload(cnt uint32, nowTime time.Time) bool

func (*DefaultRemote) SetDisconnectReason

func (p *DefaultRemote) SetDisconnectReason(reason DisconnectReason)

type Disconnect

type Disconnect struct {
	IHandler IHandler
	IRemote  IRemote
}

Disconnect 事件数据-断开链接

type DisconnectReason

type DisconnectReason int

DisconnectReason 表示断开连接的原因

const (
	DisconnectReasonUnknown DisconnectReason = 0 // 未知原因

	DisconnectReasonClientShutdown DisconnectReason = 1 // 客户端关闭
	DisconnectReasonClientLogic    DisconnectReason = 2 // 客户端逻辑
	DisconnectReasonServerShutdown DisconnectReason = 3 // 服务端关闭
	DisconnectReasonShutdown       DisconnectReason = 4 // 关闭-主动关闭
	DisconnectReasonPeerShutdown   DisconnectReason = 5 // 对端关闭

)

type IHandler

type IHandler interface {
	OnConnect(remote IRemote) error                                         // 处理-链接成功-对方链接过来
	OnCheckPacketLength(length uint32) error                                // 处理-检查长度是否合法(包头中) [recv 协程中]
	OnCheckPacketLimit(remote IRemote) error                                // 处理-限流 [recv 协程中]
	OnUnmarshalPacket(remote IRemote, data []byte) (xpacket.IPacket, error) // 处理-数据包-反序列化 [recv 协程中] // data:数据 [NOTE] 如果保存该参数 则 需要copy
	OnPacket(remote IRemote, packet xpacket.IPacket) error                  // 处理-数据包
	OnDisconnect(remote IRemote) error                                      // 处理-断开链接
}

IHandler 处理 接口

type IPacketLimit

type IPacketLimit interface {
	IsOverload(cnt uint32, nowTime time.Time) bool // 是否超载, cnt 为当前包数量, nowTime 为当前时间
}

func NewPackLimitDefault

func NewPackLimitDefault(maxCntPerSec uint32) IPacketLimit

type IRemote

type IRemote interface {
	ISend
	IPacketLimit
	IsConnect() bool
	Start(connOptions *ConnOptions, iout xcontrol.IOut, handler IHandler)
	Stop()
	GetIP() string
	GetDisconnectReason() DisconnectReason
	SetDisconnectReason(reason DisconnectReason)
}

type ISend

type ISend interface {
	Send(packet xpacket.IPacket) error
}

type KCPOptions

type KCPOptions struct {
	SndWindowSize *int           // 窗口大小-发送 [default:512]
	RcvWindowSize *int           // 窗口大小-接收 [default:512]
	Nodelay       *int           // 无延迟 0:关闭 1:打开 [default:1]
	Interval      *int           // 间隔 [default:20ms]
	Resend        *int           // 重传模式 [default:2]
	Nc            *int           // 关闭Nagle算法 0:打开 1:关闭 [default:1]
	AckNodelay    *bool          // 关闭延迟确认 [default:true]
	Mtu           *int           // 最大传输单元 [default:1350]
	BlockCrypt    kcp.BlockCrypt //加密,解密 [default:nil]
	Fec           *bool          // 是否开启FEC [default:false]
	DataShards    *int           // Fec: true 数据分片数 [default: 10] Fec: false 数据分片数 [default: 0]
	ParityShards  *int           // Fec: true 奇偶校验分片数 [default: 3] Fec: false 奇偶校验分片数 [default: 0]
}

func (*KCPOptions) Configure

func (p *KCPOptions) Configure() error

func (*KCPOptions) Merge

func (p *KCPOptions) Merge(opts ...*KCPOptions) *KCPOptions

func (*KCPOptions) WithAckNodelay

func (p *KCPOptions) WithAckNodelay(ackNodelay bool) *KCPOptions

func (*KCPOptions) WithBlockCrypt

func (p *KCPOptions) WithBlockCrypt(blockCrypt kcp.BlockCrypt) *KCPOptions

func (*KCPOptions) WithFEC

func (p *KCPOptions) WithFEC(fec bool) *KCPOptions

func (*KCPOptions) WithInterval

func (p *KCPOptions) WithInterval(interval int) *KCPOptions

func (*KCPOptions) WithMtu

func (p *KCPOptions) WithMtu(mtu int) *KCPOptions

func (*KCPOptions) WithNc

func (p *KCPOptions) WithNc(nc int) *KCPOptions

func (*KCPOptions) WithNoDelay

func (p *KCPOptions) WithNoDelay(nodelay int) *KCPOptions

func (*KCPOptions) WithRcvWindowSize

func (p *KCPOptions) WithRcvWindowSize(rcvWindowSize int) *KCPOptions

func (*KCPOptions) WithResend

func (p *KCPOptions) WithResend(resend int) *KCPOptions

func (*KCPOptions) WithSndWindowSize

func (p *KCPOptions) WithSndWindowSize(sndWindowSize int) *KCPOptions

type PackLimitDefault

type PackLimitDefault struct {
	MaxCntPerSec uint32    // 最大包数量-每秒
	Cnt          uint32    // 包数量
	Time         time.Time // 时间
}

func (*PackLimitDefault) IsOverload

func (p *PackLimitDefault) IsOverload(cnt uint32, nowTime time.Time) bool

type Packet

type Packet struct {
	IHandler IHandler
	IRemote  IRemote
	IPacket  xpacket.IPacket
}

Packet 事件数据-数据包

type PacketLimitOptions

type PacketLimitOptions struct {
	NewPacketLimitFunc func(maxCntPerSec uint32) IPacketLimit // 创建包限制器
	MaxCntPerSec       uint32                                 // 最大包数量-每秒
}

func NewPacketLimitOptions

func NewPacketLimitOptions() *PacketLimitOptions

func (*PacketLimitOptions) Configure

func (p *PacketLimitOptions) Configure() error

func (*PacketLimitOptions) Merge

func (*PacketLimitOptions) WithMaxCntPerSec

func (p *PacketLimitOptions) WithMaxCntPerSec(maxCntPerSec uint32) *PacketLimitOptions

func (*PacketLimitOptions) WithNewPacketLimitFunc

func (p *PacketLimitOptions) WithNewPacketLimitFunc(newPacketLimitFunc func(maxCntPerSec uint32) IPacketLimit) *PacketLimitOptions

type Status

type Status struct {
	Inactive       bool               // 非活跃状态
	InactiveStart  int64              // 非活跃开始时间戳
	InactiveData   []byte             // 非活跃期间缓存的数据
	DeathTimestamp int64              // 死亡时间戳
	DeathCallback  xcontrol.ICallBack // 死亡时回调函数
}

func NewStatus

func NewStatus() *Status

func (*Status) AppendCache

func (p *Status) AppendCache(data []byte)

append 缓存

func (*Status) GetCache

func (p *Status) GetCache() []byte

获取缓存

func (*Status) SetActive

func (p *Status) SetActive()

设置活跃

func (*Status) SetInactive

func (p *Status) SetInactive(deathDurationSecond int64, deathCallback xcontrol.ICallBack)

设置非活跃

Jump to

Keyboard shortcuts

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