go_kcp

package module
v0.0.0-...-0c2232d Latest Latest
Warning

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

Go to latest
Published: Jan 15, 2024 License: Apache-2.0 Imports: 16 Imported by: 0

README

go-kcp

go 重写 c++的kcp算法

Documentation

Index

Constants

View Source
const (
	IKCP_RTO_NDL       = 30  // no delay min rto
	IKCP_RTO_MIN       = 100 // normal min rto
	IKCP_RTO_DEF       = 200
	IKCP_RTO_MAX       = 60000
	IKCP_CMD_PUSH      = 81 // cmd: push data
	IKCP_CMD_ACK       = 82 // cmd: ack
	IKCP_CMD_WASK      = 83 // cmd: window probe (ask)
	IKCP_CMD_WINS      = 84 // cmd: window size (tell)
	IKCP_ASK_SEND      = 1  // need to send IKCP_CMD_WASK
	IKCP_ASK_TELL      = 2  // need to send IKCP_CMD_WINS
	IKCP_WND_SND       = 32
	IKCP_WND_RCV       = 128 // must >= max fragment size
	IKCP_MTU_DEF       = 1400
	IKCP_ACK_FAST      = 3
	IKCP_INTERVAL      = 100
	IKCP_OVERHEAD      = 24
	IKCP_DEADLINK      = 20
	IKCP_THRESH_INIT   = 2
	IKCP_THRESH_MIN    = 2
	IKCP_PROBE_INIT    = 7000   // 7 secs to probe window size
	IKCP_PROBE_LIMIT   = 120000 // up to 120 secs to probe window
	IKCP_FASTACK_LIMIT = 5      // max times to trigger fastack

)
View Source
const (
	Reset       = "\033[0m"
	Red         = "\033[31m"
	Green       = "\033[32m"
	Yellow      = "\033[33m"
	Blue        = "\033[34m"
	Magenta     = "\033[35m"
	Cyan        = "\033[36m"
	White       = "\033[37m"
	BlueBold    = "\033[34;1m"
	MagentaBold = "\033[35;1m"
	RedBold     = "\033[31;1m"
	YellowBold  = "\033[33;1m"
)

Colors

Variables

View Source
var (
	ErrorMssInvalid      = errors.New("err mss is invalid")
	ErrorsFragLimit      = errors.New("frag over limit")
	ErrorsInvalidKcpHead = errors.New("invalid kcp head")
	ErrorsInvalidConv    = errors.New("invalid kcp conv")
)
View Source
var (
	ErrorSegSizeInvalid     = errors.New("invalid seg data size")
	ErrorSegCmdTypeInvalid  = errors.New("invalid seg cmd type")
	ErrorSegInvalidPeekSize = errors.New("invalid seg peek size")
	ErrorHasPartPeekSize    = errors.New("only has  part seg peek size")
)
View Source
var (
	DebugStr = Blue + " %s " + Reset + Blue + "[debug] " + Reset
)
View Source
var KcpLogMask int64

Functions

func Debug

func Debug(msg string, data ...interface{})

func Dial

func Dial(network, address string) (net.Conn, error)

func Error

func Error(msg string, data ...interface{})

func FileWithLineNum

func FileWithLineNum() string

func GetBufferFromPool

func GetBufferFromPool(size int) []byte

func Info

func Info(msg string, data ...interface{})

func Listen

func Listen(network, address string) (net.Listener, error)

func PutBufferToPool

func PutBufferToPool(buffer []byte)

func SetKcpLogMask

func SetKcpLogMask(mask int)

func SetLogLevel

func SetLogLevel(level LogLevel)

func Warn

func Warn(msg string, data ...interface{})

Types

type IConfig

type IConfig struct {
	Define0         bool
	Define1         bool
	FastAckConServe bool
}

type IKcp

type IKcp struct {
	*IConfig

	SendMsg func(buf []byte) (n int, err error) //udp 发送消息模块
	// contains filtered or unexported fields
}

func NewIKcp

func NewIKcp(id uint32, user any) *IKcp

func (*IKcp) AckGet

func (kcp *IKcp) AckGet(p int) (sn, ts uint32)

func (*IKcp) AckPush

func (kcp *IKcp) AckPush(sn uint32, ts uint32)

func (*IKcp) Flush

func (kcp *IKcp) Flush()

func (*IKcp) GetUnusedWnd

func (kcp *IKcp) GetUnusedWnd() uint32

func (*IKcp) Input

func (kcp *IKcp) Input(data []byte) error

udp底层调用该模块去接收数据

func (*IKcp) Interval

func (kcp *IKcp) Interval(interval uint32)

func (*IKcp) NoDelay

func (kcp *IKcp) NoDelay(noDelay int32, interval int32, resend int32, nc bool)

func (*IKcp) Output

func (kcp *IKcp) Output(data []byte)

func (*IKcp) ParseAck

func (kcp *IKcp) ParseAck(sn uint32)

func (*IKcp) ParseData

func (kcp *IKcp) ParseData(newSeg *ISeg)

func (*IKcp) ParseFastAck

func (kcp *IKcp) ParseFastAck(sn uint32, ts uint32)

func (*IKcp) ParseUna

func (kcp *IKcp) ParseUna(una uint32)

将小于una 的数据报全部删除

func (*IKcp) Peek

func (kcp *IKcp) Peek() (length int)

func (*IKcp) Recv

func (kcp *IKcp) Recv(buffer []byte, isPeek bool) (n int, err error)

func (*IKcp) Send

func (kcp *IKcp) Send(buffer []byte) (sent int, err error)

上层应用发送数据

func (*IKcp) SetMtu

func (kcp *IKcp) SetMtu(mtu uint32) error

func (*IKcp) SetWndSize

func (kcp *IKcp) SetWndSize(sndwnd, rcvwnd uint32)

控制滑动窗口大小

func (*IKcp) ShrinkBuf

func (kcp *IKcp) ShrinkBuf()

func (*IKcp) Update

func (kcp *IKcp) Update(current uint32)

func (*IKcp) UpdateAck

func (kcp *IKcp) UpdateAck(rtt int32)

--------------------------------------------------------------------- parse ack ---------------------------------------------------------------------

func (*IKcp) WaitSnd

func (kcp *IKcp) WaitSnd() int

type ISeg

type ISeg struct {
	// contains filtered or unexported fields
}

func (*ISeg) Decode

func (seg *ISeg) Decode(data []byte) (err error)

func (*ISeg) Encode

func (seg *ISeg) Encode() (data []byte)

func (*ISeg) Reset

func (seg *ISeg) Reset()

type KcpLogType

type KcpLogType int
const (
	IKCP_LOG_OUTPUT    KcpLogType = 1
	IKCP_LOG_INPUT     KcpLogType = 2
	IKCP_LOG_SEND      KcpLogType = 4
	IKCP_LOG_RECV      KcpLogType = 8
	IKCP_LOG_IN_DATA   KcpLogType = 16
	IKCP_LOG_IN_ACK    KcpLogType = 32
	IKCP_LOG_IN_PROBE  KcpLogType = 64
	IKCP_LOG_IN_WINS   KcpLogType = 128
	IKCP_LOG_OUT_DATA  KcpLogType = 256
	IKCP_LOG_OUT_ACK   KcpLogType = 512
	IKCP_LOG_OUT_PROBE KcpLogType = 1024
	IKCP_LOG_OUT_WINS  KcpLogType = 2048
)

type LogLevel

type LogLevel int
const (
	LogLevelDebug LogLevel = iota
	LogLevelInfo
	LogLevelError
	LogLevelWarn
	LogLevelSilent
)

func GetLogLevel

func GetLogLevel() LogLevel

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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