Documentation ¶
Index ¶
- Constants
- Variables
- type ClientCreater
- type ClientNamer
- type GNetClient
- func (gc *GNetClient[ClientInfo]) Close(err error)
- func (gc *GNetClient[ClientInfo]) ConnName() string
- func (gc *GNetClient[ClientInfo]) Info() *ClientInfo
- func (gc *GNetClient[ClientInfo]) LocalAddr() string
- func (gc *GNetClient[ClientInfo]) RemoteAddr() string
- func (gc *GNetClient[ClientInfo]) Send(ctx context.Context, data []byte) error
- func (gc *GNetClient[ClientInfo]) SendMsg(ctx context.Context, msg utils.SendMsger) error
- func (gc *GNetClient[ClientInfo]) SendText(ctx context.Context, data []byte) error
- type GNetEvent
- type GNetEventHandler
- func (h *GNetEventHandler[ClientInfo]) Context(parent context.Context, msg interface{}) context.Context
- func (*GNetEventHandler[ClientInfo]) DecodeMsg(ctx context.Context, data []byte, gc *GNetClient[ClientInfo]) (interface{}, int, error)
- func (*GNetEventHandler[ClientInfo]) OnConnected(ctx context.Context, gc *GNetClient[ClientInfo])
- func (*GNetEventHandler[ClientInfo]) OnDisConnect(ctx context.Context, gc *GNetClient[ClientInfo])
- func (*GNetEventHandler[ClientInfo]) OnMsg(ctx context.Context, msg interface{}, gc *GNetClient[ClientInfo])
- func (*GNetEventHandler[ClientInfo]) OnTick(ctx context.Context, gc *GNetClient[ClientInfo])
- type GNetHook
- type GNetServer
- func (s *GNetServer[ClientId, ClientInfo]) AddClient(id ClientId, gc *GNetClient[ClientInfo])
- func (s *GNetServer[ClientId, ClientInfo]) ClientCount() int
- func (s *GNetServer[ClientId, ClientInfo]) CloseClient(id ClientId)
- func (s *GNetServer[ClientId, ClientInfo]) ConnCount() (int, int)
- func (s *GNetServer[ClientId, ClientInfo]) Decode(c gnet.Conn) ([]byte, error)
- func (s *GNetServer[ClientId, ClientInfo]) Encode(c gnet.Conn, buf []byte) ([]byte, error)
- func (s *GNetServer[ClientId, ClientInfo]) GetClient(id ClientId) *GNetClient[ClientInfo]
- func (s *GNetServer[ClientId, ClientInfo]) OnClosed(c gnet.Conn, err error) (action gnet.Action)
- func (s *GNetServer[ClientId, ClientInfo]) OnInitComplete(server gnet.Server) (action gnet.Action)
- func (s *GNetServer[ClientId, ClientInfo]) OnOpened(c gnet.Conn) (out []byte, action gnet.Action)
- func (s *GNetServer[ClientId, ClientInfo]) OnShutdown(server gnet.Server)
- func (s *GNetServer[ClientId, ClientInfo]) RangeClient(f func(gc *GNetClient[ClientInfo]) bool)
- func (s *GNetServer[ClientId, ClientInfo]) React(packet []byte, c gnet.Conn) (out []byte, action gnet.Action)
- func (s *GNetServer[ClientId, ClientInfo]) RegHook(h GNetHook[ClientInfo])
- func (s *GNetServer[ClientId, ClientInfo]) RemoveClient(id ClientId) *GNetClient[ClientInfo]
- func (s *GNetServer[ClientId, ClientInfo]) Send(ctx context.Context, id ClientId, data []byte) error
- func (s *GNetServer[ClientId, ClientInfo]) SendMsg(ctx context.Context, id ClientId, msg utils.SendMsger) error
- func (s *GNetServer[ClientId, ClientInfo]) Start() error
- func (s *GNetServer[ClientId, ClientInfo]) Stop() error
- func (s *GNetServer[ClientId, ClientInfo]) Tick() (delay time.Duration, action gnet.Action)
- type ParamConfig
Constants ¶
View Source
const CtxKey_Text = utils.CtxKey("text") // 数据为text格式,否则为二进制格式 值:不受限制 一般写1
View Source
const CtxKey_WS = utils.CtxKey("ws") // 表示ws连接 值:不受限制 一般写1
Variables ¶
View Source
var ParamConf loader.JsonLoader[ParamConfig]
View Source
var WSHeader = http.Header{ "GOVersion": []string{runtime.Version()}, "GOOS": []string{runtime.GOOS}, "GOARCH": []string{runtime.GOARCH}, }
握手时给客户端回复的头,外部可修改
Functions ¶
This section is empty.
Types ¶
type ClientCreater ¶
type ClientCreater interface {
ClientCreate()
}
type ClientNamer ¶
type ClientNamer interface {
ClientName() string
}
type GNetClient ¶
type GNetClient[ClientInfo any] struct { // contains filtered or unexported fields }
ClientInfo是和业务相关的客户端信息结构 如果ClientInfo存在ClientCreate函数,创建链接时会调用 如果ClientInfo存在ClientName函数,输出日志是会调用
func (*GNetClient[ClientInfo]) Close ¶
func (gc *GNetClient[ClientInfo]) Close(err error)
会回调event的OnDisConnect 若想不回调使用 GNetServer.CloseClient
func (*GNetClient[ClientInfo]) ConnName ¶
func (gc *GNetClient[ClientInfo]) ConnName() string
func (*GNetClient[ClientInfo]) Info ¶
func (gc *GNetClient[ClientInfo]) Info() *ClientInfo
func (*GNetClient[ClientInfo]) LocalAddr ¶
func (gc *GNetClient[ClientInfo]) LocalAddr() string
func (*GNetClient[ClientInfo]) RemoteAddr ¶
func (gc *GNetClient[ClientInfo]) RemoteAddr() string
func (*GNetClient[ClientInfo]) Send ¶
func (gc *GNetClient[ClientInfo]) Send(ctx context.Context, data []byte) error
type GNetEvent ¶
type GNetEvent[ClientInfo any] interface { // 收到连接 OnConnected(ctx context.Context, gc *GNetClient[ClientInfo]) // 用户掉线 OnDisConnect(ctx context.Context, gc *GNetClient[ClientInfo]) // DecodeMsg 解码消息实现 // 返回值为 msg,len,err // msg 解码出的消息体 // len 解码消息的数据长度,内部根据len来删除已解码的数据 // err 解码错误,若发生error,服务器将重连 DecodeMsg(ctx context.Context, data []byte, gc *GNetClient[ClientInfo]) (interface{}, int, error) // Context 生成Context, 目前OnMsg、OnTick参数使用 // msg为nil时 表示是OnTick调用 Context(parent context.Context, msg interface{}) context.Context // OnRecv 收到消息,解码成功后调用 异步顺序调用 OnMsg(ctx context.Context, msg interface{}, gc *GNetClient[ClientInfo]) // tick每秒调用一次 异步调用 OnTick(ctx context.Context, gc *GNetClient[ClientInfo]) }
type GNetEventHandler ¶
type GNetEventHandler[ClientInfo any] struct { }
GNetEventHandler GNetEvent的内置实现 如果不想实现GNetEvent的所有接口,可以继承它实现部分方法
func (*GNetEventHandler[ClientInfo]) Context ¶
func (h *GNetEventHandler[ClientInfo]) Context(parent context.Context, msg interface{}) context.Context
func (*GNetEventHandler[ClientInfo]) DecodeMsg ¶
func (*GNetEventHandler[ClientInfo]) DecodeMsg(ctx context.Context, data []byte, gc *GNetClient[ClientInfo]) (interface{}, int, error)
func (*GNetEventHandler[ClientInfo]) OnConnected ¶
func (*GNetEventHandler[ClientInfo]) OnConnected(ctx context.Context, gc *GNetClient[ClientInfo])
func (*GNetEventHandler[ClientInfo]) OnDisConnect ¶
func (*GNetEventHandler[ClientInfo]) OnDisConnect(ctx context.Context, gc *GNetClient[ClientInfo])
func (*GNetEventHandler[ClientInfo]) OnMsg ¶
func (*GNetEventHandler[ClientInfo]) OnMsg(ctx context.Context, msg interface{}, gc *GNetClient[ClientInfo])
func (*GNetEventHandler[ClientInfo]) OnTick ¶
func (*GNetEventHandler[ClientInfo]) OnTick(ctx context.Context, gc *GNetClient[ClientInfo])
type GNetHook ¶
type GNetHook[ClientInfo any] interface { // 收到连接 OnConnected(gc *GNetClient[ClientInfo]) // ws连接握手 OnWSHandShake(gc *GNetClient[ClientInfo]) // 用户掉线,removeClient表示是否引起RemoveClient,但不会调用OnRemoveClient OnDisConnect(gc *GNetClient[ClientInfo], removeClient bool, closeReason error) // 添加Client OnAddClient(gc *GNetClient[ClientInfo]) // 添加Client OnRemoveClient(gc *GNetClient[ClientInfo]) // 发送数据 OnSend(gc *GNetClient[ClientInfo], len int) // 接受数据 OnRecv(gc *GNetClient[ClientInfo], len int) }
Hook
type GNetServer ¶
type GNetServer[ClientId any, ClientInfo any] struct { *gnet.EventServer // 不可需改 Address string // 监听地址 Scheme string // scheme支持tcp和ws,为空表示tcp // contains filtered or unexported fields }
GNetServer ClientId客户端ID类型 ClientInfo是和业务相关的客户端信息结构类型
func NewGNetServer ¶
func NewGNetServer[ClientId any, ClientInfo any](port int, event GNetEvent[ClientInfo]) *GNetServer[ClientId, ClientInfo]
创建服务器 scheme支持tcp和ws,为空表示tcp
func NewGNetServerWS ¶
func NewGNetServerWS[ClientId any, ClientInfo any](port int, event GNetEvent[ClientInfo]) *GNetServer[ClientId, ClientInfo]
func (*GNetServer[ClientId, ClientInfo]) AddClient ¶
func (s *GNetServer[ClientId, ClientInfo]) AddClient(id ClientId, gc *GNetClient[ClientInfo])
添加用户映射
func (*GNetServer[ClientId, ClientInfo]) ClientCount ¶
func (s *GNetServer[ClientId, ClientInfo]) ClientCount() int
func (*GNetServer[ClientId, ClientInfo]) CloseClient ¶
func (s *GNetServer[ClientId, ClientInfo]) CloseClient(id ClientId)
主动关闭 不会回调事件的OnDisConnect 使用GNetClient.Close会回调事件的OnDisConnect
func (*GNetServer[ClientId, ClientInfo]) ConnCount ¶
func (s *GNetServer[ClientId, ClientInfo]) ConnCount() (int, int)
func (*GNetServer[ClientId, ClientInfo]) Decode ¶
func (s *GNetServer[ClientId, ClientInfo]) Decode(c gnet.Conn) ([]byte, error)
返回值[]byte 就是React的packet
func (*GNetServer[ClientId, ClientInfo]) GetClient ¶
func (s *GNetServer[ClientId, ClientInfo]) GetClient(id ClientId) *GNetClient[ClientInfo]
func (*GNetServer[ClientId, ClientInfo]) OnInitComplete ¶
func (s *GNetServer[ClientId, ClientInfo]) OnInitComplete(server gnet.Server) (action gnet.Action)
func (*GNetServer[ClientId, ClientInfo]) OnShutdown ¶
func (s *GNetServer[ClientId, ClientInfo]) OnShutdown(server gnet.Server)
func (*GNetServer[ClientId, ClientInfo]) RangeClient ¶
func (s *GNetServer[ClientId, ClientInfo]) RangeClient(f func(gc *GNetClient[ClientInfo]) bool)
遍历Client f函数返回false 停止遍历
func (*GNetServer[ClientId, ClientInfo]) RegHook ¶
func (s *GNetServer[ClientId, ClientInfo]) RegHook(h GNetHook[ClientInfo])
注册hook
func (*GNetServer[ClientId, ClientInfo]) RemoveClient ¶
func (s *GNetServer[ClientId, ClientInfo]) RemoveClient(id ClientId) *GNetClient[ClientInfo]
func (*GNetServer[ClientId, ClientInfo]) Send ¶
func (s *GNetServer[ClientId, ClientInfo]) Send(ctx context.Context, id ClientId, data []byte) error
func (*GNetServer[ClientId, ClientInfo]) Start ¶
func (s *GNetServer[ClientId, ClientInfo]) Start() error
开启监听
func (*GNetServer[ClientId, ClientInfo]) Stop ¶
func (s *GNetServer[ClientId, ClientInfo]) Stop() error
type ParamConfig ¶
type ParamConfig struct { IgnoreIp []string `json:"ignoreip,omitempty"` // 建立连接和失去连接时,log输出忽略的ip, 支持?*通配符 不区分大小写 // SendMsg接口中,输出日志等级会按照下面的配置来执行,否则按照Debug输出 // 日志级别和zerolog.Level一致 LogLevelMsg int `json:"loglevelmsg,omitempty"` // msg消息默认的消息级别,不配置就是debug级别 LogLevelByMsg map[string]int `json:"loglevelbymsg,omitempty"` // 根据消息ID区分的消息日志级别,消息ID:日志级别,不配置就使用LogLevelMsg级别 ActiveTimeout int `json:"activetimeout,omitempty"` // 连接活跃超时时间 单位秒 <=0表示不检查活跃 MsgSeq bool `json:"msgseq,omitempty"` // 消息顺序执行 WSHeader map[string][]string `json:"wsheader,omitempty"` // websocket握手时 回复的头 }
参数配置
func (*ParamConfig) Create ¶
func (c *ParamConfig) Create()
func (*ParamConfig) IsIgnoreIp ¶
func (c *ParamConfig) IsIgnoreIp(ip string) bool
func (*ParamConfig) MsgLogLevel ¶
func (c *ParamConfig) MsgLogLevel(msgid string) int
func (*ParamConfig) Normalize ¶
func (c *ParamConfig) Normalize()
Click to show internal directories.
Click to hide internal directories.