network

package
v1.0.11 Latest Latest
Warning

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

Go to latest
Published: May 13, 2023 License: BSD-3-Clause Imports: 14 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// HeadLen 为了免于计算 实时与Head结构对应
	HeadLen = 20
)

Variables

This section is empty.

Functions

func Marshal

func Marshal(msg *Message, gzipStatus int32) []byte

Marshal 序列化message

Types

type Connection

type Connection struct {
	OnConnectionClosed func(int64) // 参数是sessionID
	// contains filtered or unexported fields
}

Connection 封装后的连接对象,内部封装了 net.Conn 对象

func (*Connection) Addr

func (c *Connection) Addr() string

Addr 远端地址

func (*Connection) Close added in v1.0.5

func (c *Connection) Close() <-chan bool

Close 主动关闭连接 返回 pendingQuit channel,当 Connection 完成关闭操作后此 pendingQuit 也会被关闭 主动关闭从先关闭发送消息缓冲队列 writeChan 开始 写线程在将 writeChan 中已有的消息全部发送之后,关闭底层连接 然后读线程会产生读错误退出,退出时进行清理工作,并且关闭 pendingQuit channel

func (*Connection) CloseConnection

func (c *Connection) CloseConnection() <-chan bool

[Deprecated]主动关闭连接

func (*Connection) GetSessionID

func (c *Connection) GetSessionID() int64

GetSessionID 获取SessionID

func (*Connection) IsAlive

func (c *Connection) IsAlive() bool

IsAlive 判断connection是否有效

func (*Connection) IsReading added in v1.0.5

func (c *Connection) IsReading() bool

func (*Connection) IsWriting added in v1.0.5

func (c *Connection) IsWriting() bool

func (*Connection) Push

func (c *Connection) Push(MsgID int32, value interface{}) error

Push 推送

func (*Connection) SetGzip

func (c *Connection) SetGzip(status int32)

SetGzip 设置Gzip

func (*Connection) SetSessionID

func (c *Connection) SetSessionID(sessionid int64)

SetSessionID 设置SessionID

func (*Connection) Write

func (c *Connection) Write(msg *Message) error

发送消息

type Context

type Context struct {
	Time time.Time // 消息接收时间
	// contains filtered or unexported fields
}

Context 网络通信的上下文

func (*Context) Conn

func (ctx *Context) Conn() *Connection

Conn ...

func (*Context) Continue

func (ctx *Context) Continue()

Continue 此消息上下文是否继续执行 Routine 在中间件中必须调用此方法,才能继续执行后续中间件以及消息处理器 如果在中间件中提前向客户端返回并退出时则不需要再调用此方法 在消息处理其中不能调用此方法

func (*Context) GetKV

func (ctx *Context) GetKV(key string) interface{}

GetKV ...

func (*Context) GetResponse added in v0.1.5

func (ctx *Context) GetResponse() interface{}

GetResponse 获取已经写入的应答消息

func (*Context) HasResponsed added in v0.1.6

func (ctx *Context) HasResponsed() bool

HasResponsed 此Context是否已经发送过应答了。一个Context只能发送一次应答

func (*Context) Message

func (ctx *Context) Message() *Message

Message ...

func (*Context) ReadJSON

func (ctx *Context) ReadJSON(value interface{}) error

ReadJSON 读取消息正文的Json数据,反序列化为结构

func (*Context) Response

func (ctx *Context) Response(value interface{})

Response 返回应答消息给客户端

func (*Context) SetKV

func (ctx *Context) SetKV(key string, value interface{})

SetKV ...

func (*Context) Write added in v0.1.6

func (ctx *Context) Write() error

Write 真正将应答数据发往客户端 将结构序列化为Json 应答消息的消息ID与请求消息相同 请求消息的ReqID被原样返回

type Head struct {
	// 消息长度,包括自身在内
	Len int32
	// 消息协议ID,用于表示消息的类型
	ID int32
	// 请求编号,客户端生成的请求流水号,在请求的应答里原样返回,用于识别应答与请求的对应关系,客户端生成的流水号不可以为0
	// 如果是推送通知类消息,此字段固定为0。
	ReqID int32
	// 时间戳
	Timestap int32
	// 协议版本号
	Version int32
}

Head 消息头

type Message

type Message struct {
	MsgHead Head
	Content []byte
}

Message 消息通用格式 客户端收到服务器的ack格式:

{"code":1,"content":{}}

func NewMessage

func NewMessage(msgID, reqID, timestap int32) *Message

NewMessage : Message构造器

func Unmarshal

func Unmarshal(buff []byte) (*Message, int, error)

Unmarshal 反序列化message 如果网路接收数据不足消息头的长度,则返回错误 如果网络接收数据长度不足一个消息长度,则返回错误,同时返回截断的消息的长度 如果成功解析一条消息,则返回消息结构

type Party

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

Party 消息协议组

func (*Party) RegisterProc

func (p *Party) RegisterProc(id int32, proc Proc)

RegisterProc 注册消息处理路由

func (*Party) Use

func (p *Party) Use(middleware Proc)

Use 消息协议组使用一个处理函数作为中间件 中间件按照注册的顺序,在消息真正处理函数处理之前被调用 任一中间件函数可以终止消息的处理路径,比如验证用户身份失败

type Proc

type Proc func(*Context)

Proc 游戏处理方法

type Routine

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

Routine 协议处理路径

type Server

type Server struct {
	sync.RWMutex

	OnNewConn     func(*Connection)
	OnRecvMessage func(*Context)
	OnRespMessage func(*Context, *Message)

	ReadBuffSize       int // 与客户端的通信的读缓冲区初始长度
	ReadBuffSizeMax    int // 与客户端的通信的读缓冲区最大长度
	ReadTimeoutInitial int // TCP连接建立后首次read的超时时间
	ReadTimeout        int // read超时时间
	// contains filtered or unexported fields
}

Server : 管理服务器的网络层

func NewServer

func NewServer() *Server

NewServer 构造函数,创建一个新的 Server 对象

func (*Server) CloseConnections

func (s *Server) CloseConnections() bool

CloseConnections 关闭服务器已建立的全部连接

func (*Server) ConnectionCout

func (s *Server) ConnectionCout() int

ConnectionCout 当前连接数量

func (*Server) DefaultProc

func (s *Server) DefaultProc(proc Proc)

DefaultProc 向TCP服务注册默认消息处理路由,不能在路由表中查到的消息ID会交给默认消息路由处理

func (*Server) Party

func (s *Server) Party(name string) *Party

Party 创建或者返回一个指定名称的协议组

func (*Server) RegisterProc

func (s *Server) RegisterProc(id int32, proc Proc)

RegisterProc 向TCP服务的默认消息组注册消息处理路由,默认消息组名字为空

func (*Server) Shutdown

func (s *Server) Shutdown()

Shutdown 服务关闭

func (*Server) Start

func (s *Server) Start(ip string) error

Start : Server 启动,一旦有新连接加入客户端管理器里

Jump to

Keyboard shortcuts

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