cosnet

package
v0.0.0-...-f82ef47 Latest Latest
Warning

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

Go to latest
Published: May 16, 2021 License: Apache-2.0 Imports: 20 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var Config = struct {
	AutoCompressSize int32 //自动压缩
	UdpServerGoCnt   int

	SSLCrtPath     string
	SSLKeyPath     string
	EnableWss      bool
	ReadDataBuffer int
	StopTimeout    int

	WriteChanSize  int32 //写通道缓存
	ConnectMaxSize int32 //连接人数

	SocketTimeout   int //连接超时几次心跳没有动作被判断掉线
	SocketHeartbeat int //(MS)服务器心跳,用来检测玩家僵尸连接

	MsgDataType MsgDataType //默认包体编码方式
}{

	UdpServerGoCnt: 64,
	ReadDataBuffer: 1 << 12,
	StopTimeout:    3000,

	WriteChanSize:  500,
	ConnectMaxSize: 50000,

	SocketTimeout:   5,
	SocketHeartbeat: 2000,

	MsgDataType: MsgDataTypeProto,
}
View Source
var MsgDataSize = 1024 * 1024
View Source
var MsgHeadSize = 12

Functions

func BytesToInt

func BytesToInt(b []byte, n interface{})

字节转换成整形,n 必须是指针 var a int32 BytesToInt([]byte{1},&a)

func GZipCompress

func GZipCompress(data []byte) []byte

func GZipUnCompress

func GZipUnCompress(data []byte) ([]byte, error)

func IntToBytes

func IntToBytes(n interface{}) []byte

整形转换成字节

func ZlibCompress

func ZlibCompress(data []byte) []byte

func ZlibUnCompress

func ZlibUnCompress(data []byte) ([]byte, error)

Types

type Handler

type Handler interface {
	On(HandlerEventType, HandlerEventFunc)
	Emit(HandlerEventType, Socket) bool
	Message(Socket, *Message) bool //消息处理函数
}

type HandlerDefault

type HandlerDefault struct {
	HandlerEvents
	Handle map[int]HandlerMessageFunc
}

func NewHandlerDefault

func NewHandlerDefault() *HandlerDefault

func (*HandlerDefault) Message

func (r *HandlerDefault) Message(sock Socket, msg *Message) bool

func (*HandlerDefault) Register

func (r *HandlerDefault) Register(act int, fun HandlerMessageFunc)

type HandlerEventFunc

type HandlerEventFunc func(Socket) bool

type HandlerEventType

type HandlerEventType int32
const (
	HandlerEventTypeConnect HandlerEventType = iota
	HandlerEventTypeDisconnect
)

type HandlerEvents

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

func (*HandlerEvents) Emit

func (this *HandlerEvents) Emit(e HandlerEventType, s Socket) bool

func (*HandlerEvents) On

type HandlerMessageFunc

type HandlerMessageFunc func(Socket, *Message) bool
type Header struct {
	Size     int32  //数据长度 4294967295 4
	Index    int32  //消息序号 4
	Proto    uint16 //协议号 2
	Flags    MsgFlagType
	DataType MsgDataType //DATA 格式
}

func (*Header) Bytes

func (m *Header) Bytes() []byte

Bytes 生成成byte类型head

func (*Header) Parse

func (m *Header) Parse(head []byte) error

parse 解析[]byte并填充字段

type Message

type Message struct {
	Head *Header //消息头,可能为nil
	Data []byte  //消息数据
}

func NewMsg

func NewMsg(b []byte) (*Message, error)

func (*Message) Bind

func (r *Message) Bind(i interface{}) error

func (*Message) Bytes

func (r *Message) Bytes() []byte

Bytes 生成二进制文件

func (*Message) NewMsg

func (r *Message) NewMsg(proto uint16, data []byte) *Message

type MsgDataType

type MsgDataType uint8
const (
	MsgDataTypeString MsgDataType = 1
	MsgDataTypeInt32  MsgDataType = 2
	MsgDataTypeJson   MsgDataType = 3
	MsgDataTypeProto  MsgDataType = 4
	MsgDataTypeXml    MsgDataType = 5
)

type MsgFlagType

type MsgFlagType uint8
const (
	MsgFlagEncrypt  MsgFlagType = 1 << 0 //数据是经过加密的
	MsgFlagCompress MsgFlagType = 1 << 1 //数据是经过压缩的
	MsgFlagContinue MsgFlagType = 1 << 2 //消息还有后续
	MsgFlagNeedAck  MsgFlagType = 1 << 3 //消息需要确认
	MsgFlagSubmit   MsgFlagType = 1 << 4 //确认消息
	MsgFlagReSend   MsgFlagType = 1 << 5 //重发消息
	MsgFlagClient   MsgFlagType = 1 << 6 //消息来自客服端,用于判断index来之服务器还是其他玩家
)

func (*MsgFlagType) Add

func (m *MsgFlagType) Add(f MsgFlagType)

func (*MsgFlagType) Del

func (m *MsgFlagType) Del(f MsgFlagType)

func (*MsgFlagType) Has

func (m *MsgFlagType) Has(f MsgFlagType) bool

type MsgType

type MsgType int
const (
	MsgTypeMsg MsgType = iota //消息基于确定的消息头
	MsgTypeCmd                //消息没有消息头,以\n分割
)

type NetServer

type NetServer struct {
	*utils.SCC
	// contains filtered or unexported fields
}

func NewNetServer

func NewNetServer(address string, handler Handler, msgTyp MsgType, netType NetType) *NetServer

func (*NetServer) GetMsgType

func (s *NetServer) GetMsgType() MsgType

func (*NetServer) GetNetType

func (s *NetServer) GetNetType() NetType

func (*NetServer) Sockets

func (s *NetServer) Sockets() *Sockets

type NetSocket

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

func NewSocket

func NewSocket(handler Handler) (sock *NetSocket)

func (*NetSocket) Close

func (s *NetSocket) Close() bool

关闭

func (*NetSocket) GetUser

func (s *NetSocket) GetUser() interface{}

func (*NetSocket) Heartbeat

func (s *NetSocket) Heartbeat()

每一次Heartbeat() heartbeat计数加1

func (*NetSocket) Id

func (s *NetSocket) Id() uint64

func (*NetSocket) IsProxy

func (s *NetSocket) IsProxy() bool

func (*NetSocket) KeepAlive

func (s *NetSocket) KeepAlive()

任何行为都清空heartbeat

func (*NetSocket) LocalAddr

func (s *NetSocket) LocalAddr() string

func (*NetSocket) RemoteAddr

func (s *NetSocket) RemoteAddr() string

func (*NetSocket) SetRealRemoteAddr

func (s *NetSocket) SetRealRemoteAddr(addr string)

func (*NetSocket) SetUser

func (s *NetSocket) SetUser(user interface{})

func (*NetSocket) Stopped

func (s *NetSocket) Stopped() bool

func (*NetSocket) Write

func (s *NetSocket) Write(m *Message) (re bool)

type NetType

type NetType int
const (
	NetTypeTcp NetType = iota //TCP类型
	NetTypeUdp                //UDP类型dw
	NetTypeWss                //websocket
)

type Server

type Server interface {
	Start() error
	Close() error
	Sockets() *Sockets
	GetMsgType() MsgType
	GetNetType() NetType
}

func NewServer

func NewServer(addr string, handler Handler) (srv Server)

启动服务器,根据

type Socket

type Socket interface {
	Id() uint64
	LocalAddr() string
	RemoteAddr() string
	SetRealRemoteAddr(addr string)
	Close() bool
	IsProxy() bool
	Write(m *Message) bool
	SetUser(interface{})
	GetUser() interface{}

	Heartbeat()
	KeepAlive()
}

各种服务器(TCP,UDP,WS)也使用该接口

type Sockets

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

socket 管理器

func NewSockets

func NewSockets(handler Handler, cap int) *Sockets

NewSockets socket管理器 cap初始容器大小

func (*Sockets) Add

func (s *Sockets) Add(sock Socket) uint64

func (*Sockets) Broadcast

func (s *Sockets) Broadcast(msg *Message, filter func(Socket) bool)

Broadcast 广播,filter 过滤函数,如果不为nil且返回false则不对当期socket进行发送消息

func (*Sockets) Del

func (s *Sockets) Del(id uint64) bool

Del 删除

func (*Sockets) Get

func (s *Sockets) Get(id uint64) Socket

Get 获取

func (*Sockets) Range

func (s *Sockets) Range(f func(Socket))

遍历

func (*Sockets) Size

func (s *Sockets) Size() int

Size 当前socket数量

func (*Sockets) Start

func (s *Sockets) Start(ctx context.Context)

type TcpClient

type TcpClient struct {
	*TcpServer
}

func NewTcpClient

func NewTcpClient(address string, handler Handler) *TcpClient

func (*TcpClient) Connect

func (s *TcpClient) Connect(address string) (sock Socket)

func (*TcpClient) Start

func (s *TcpClient) Start() error

type TcpServer

type TcpServer struct {
	*NetServer
	// contains filtered or unexported fields
}

func NewTcpServer

func NewTcpServer(address string, handler Handler) *TcpServer

func (*TcpServer) Close

func (s *TcpServer) Close() error

func (*TcpServer) Shutdown

func (s *TcpServer) Shutdown()

Shutdown

func (*TcpServer) Start

func (s *TcpServer) Start() error

type TcpSocket

type TcpSocket struct {
	*NetSocket
	// contains filtered or unexported fields
}

func (*TcpSocket) Close

func (s *TcpSocket) Close() bool

func (*TcpSocket) LocalAddr

func (s *TcpSocket) LocalAddr() string

func (*TcpSocket) RemoteAddr

func (s *TcpSocket) RemoteAddr() string

Jump to

Keyboard shortcuts

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