gameapi

package
v0.1.6 Latest Latest
Warning

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

Go to latest
Published: Jul 25, 2023 License: MIT Imports: 27 Imported by: 0

Documentation

Index

Constants

View Source
const (
	StateZero   = iota // 服务初始状态,服务连接数为0
	StateIdle          // 服务空闲,优先获得连接
	StateAliave        // 服务正常运行,均衡获得连接
	StateBusy          // 服务繁忙,滞后获得连接
	StateFull          // 服务满载,不获得新连接
)
View Source
const (
	// 向NATS中push推送给其他玩家消息的键
	NatsPushUserK = `GAME_PUSH_USER:%s`
)

Variables

View Source
var (
	ErrNoImplementNetwork = errors.New("no implement network: ")
	ErrConnClosing        = errors.New("session connect is closing")
	ErrUserNoIn           = errors.New("user no in instance")
	ErrWrongOpCode        = errors.New("wrong opcode")
)

Functions

func GetRequestID added in v0.1.0

func GetRequestID(ctx Context) string

GetRequestID 别名函数,保持一致

Types

type App

type App struct {
	boot.BaseInstance
	// contains filtered or unexported fields
}

App 游戏服务器实现

func New

func New(name string, configPath string, addr string, instancdID int64) *App

New 创建一个游戏服务器接口实例

func (*App) AddAfterMiddleware added in v0.1.2

func (a *App) AddAfterMiddleware(m Middleware)

AddAfterMiddleware 设置详细处理后的中间件

func (*App) AddBeforeMiddleware added in v0.1.2

func (a *App) AddBeforeMiddleware(m Middleware)

SetBeforeMiddleware 设置消息处理前中间件

func (*App) AddHandler

func (a *App) AddHandler(opcode interface{}, h Handler)

AddHandler 增加处理器

func (*App) AddModule

func (a *App) AddModule(module Module)

AddModule 增加所有模块

func (*App) AddSession added in v0.0.4

func (a *App) AddSession(userID int64, session *Session)

AddSession 加入Session

func (*App) DelSession added in v0.1.5

func (a *App) DelSession(userID int64, sessionid int64)

DelSession 删除Session

func (*App) DisableFuse added in v0.1.6

func (a *App) DisableFuse() error

DisableFuse 关闭熔断开关

func (*App) EnableFuse added in v0.1.6

func (a *App) EnableFuse() error

EnableFuse 打开熔断开关

func (*App) GetGd added in v0.1.4

func (a *App) GetGd() GameMetaData

GetGd 获取此服务的元数据

func (*App) GetTotalConn

func (a *App) GetTotalConn() int64

GetTotalConn 获取连接总数

func (*App) Init

func (a *App) Init() (err error)

Init 初始化服务

func (*App) OnConnect

func (a *App) OnConnect(session *Session) bool

OnConnect 连接时处理

func (*App) OnDisConnect

func (a *App) OnDisConnect(session *Session)

OnDisConnect 断线处理

func (*App) OnHeartbeat added in v0.1.6

func (a *App) OnHeartbeat(session *Session)

OnHeartbeat 心跳处理

func (*App) OnMessage

func (a *App) OnMessage(session *Session, p Packet) bool

OnMessage 消息处理

func (*App) SendActor added in v0.0.4

func (a *App) SendActor(userID int64, opcode uint16, msg proto.Message) error

SendActor 向指定玩家发送消息

func (*App) SendAllActor added in v0.1.2

func (a *App) SendAllActor(opcode uint16, msg proto.Message) error

SendAllActor 向所有玩家发送消息

func (*App) SetConnectListener

func (a *App) SetConnectListener(l Listener)

SetConnectListener 设置连接监听器

func (*App) SetDisconnectListener

func (a *App) SetDisconnectListener(l Listener)

SetDisconnectListener 设置断连监听器

func (*App) SetHeartbeatListener added in v0.1.6

func (a *App) SetHeartbeatListener(l Listener)

SetHeartbeatListener 设置心跳监听器

func (*App) Start

func (a *App) Start() error

Start 启动服务

func (*App) Stop

func (a *App) Stop()

Stop 停止服务

func (*App) UpdateGdExtra added in v0.1.6

func (a *App) UpdateGdExtra(extra interface{}) error

UpdateGdExtra 修改服务的

func (*App) UpdateGdState added in v0.1.2

func (a *App) UpdateGdState(state int) error

UpdateGdState 修改服务状态

type Client added in v0.0.4

type Client struct {
	Conn NetConn
	// contains filtered or unexported fields
}

Client tcp/kcp的传输客户端

func NewClient added in v0.0.4

func NewClient(network string, config NetConfig, readLimit int, sendLimit int, heart time.Duration) (*Client, error)

NewClient 新客户端 conn 连接协议实例 readLimit 最大读取包 sendLimit 最大写入包 heart 心跳周期

func (*Client) Close added in v0.0.4

func (c *Client) Close()

Close 关闭服务

func (*Client) KeepAlive added in v0.0.4

func (c *Client) KeepAlive(interval time.Duration)

KeepAlive 保持心跳

func (*Client) Ping added in v0.0.4

func (c *Client) Ping()

Ping 发送心跳

func (*Client) Receive added in v0.0.4

func (c *Client) Receive() <-chan Packet

Receive 读取消息

func (*Client) Send added in v0.0.4

func (c *Client) Send(opcode uint16, msg protoreflect.ProtoMessage) error

Send 发送消息

type Context

type Context interface {

	// Context 返回一个context.Context
	Context() context.Context

	// Parmas 取出请求参数
	Params(m protoreflect.ProtoMessage) error

	// Session 获取这个玩家的Session
	Session() *Session

	// Send 发送消息到玩家
	Send(opcode interface{}, msg proto.Message) error

	// SendActor 向其他玩家发送消息
	SendActor(userID int64, opcode interface{}, msg proto.Message) error

	// SendAllActor 向所有玩家发送消息
	SendAllActor(opcode interface{}, msg proto.Message) error

	// SendActorLocation 向本地其他玩家发送Actor
	SendActorLocation(userID int64, opcode interface{}, msg proto.Message) error

	// SendActorPush 向远程玩家发送Actor
	SendActorPush(userID int64, opcode interface{}, msg proto.Message) error

	// Valid 验证玩家成功,传入用户ID
	Valid(userID int64)

	// GetOpCode 获取此次请求的opcode
	GetOpCode() uint16

	// GetRequestID 获得请求ID
	GetRequestID() string
}

Context 抽象每个Handler的调用参数

func NewDefaultContext

func NewDefaultContext(ctx context.Context, a *App, session *Session, opcode uint16, body []byte) Context

NewDefaultContext

type DefaultContext

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

DefaultContext 默认Context实现

func (*DefaultContext) Context

func (c *DefaultContext) Context() context.Context

func (*DefaultContext) GetOpCode added in v0.1.2

func (c *DefaultContext) GetOpCode() uint16

GetOpCode 获取此次处理的opcode

func (*DefaultContext) GetRequestID added in v0.1.0

func (c *DefaultContext) GetRequestID() string

GetRequestID 获得请求ID

func (*DefaultContext) Params

func (*DefaultContext) Send

func (c *DefaultContext) Send(opcode interface{}, msg proto.Message) error

WritePbPacket 写入Protobuf的包

func (*DefaultContext) SendActor added in v0.0.4

func (c *DefaultContext) SendActor(userID int64, opcode interface{}, msg proto.Message) error

SendActor 向指定玩家发送消息

func (*DefaultContext) SendActorLocation added in v0.1.5

func (c *DefaultContext) SendActorLocation(userID int64, opcode interface{}, msg proto.Message) error

SendActorLocation 向本地其他玩家发送Actor

func (*DefaultContext) SendActorPush added in v0.1.5

func (c *DefaultContext) SendActorPush(userID int64, opcode interface{}, msg proto.Message) error

SendActorPush 向远程玩家发送消息

func (*DefaultContext) SendAllActor added in v0.1.2

func (c *DefaultContext) SendAllActor(opcode interface{}, msg proto.Message) error

SendAllActor 向所有玩家发送消息

func (*DefaultContext) Session

func (c *DefaultContext) Session() *Session

func (*DefaultContext) Valid added in v0.0.4

func (c *DefaultContext) Valid(userID int64)

Valid 验证成功

type DefaultPacket

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

DefaultPacket 基于Protobuffer的包协议

func NewDefaultPacket

func NewDefaultPacket(buff []byte, opcode uint16) *DefaultPacket

NewPbPacket 新建一个pb的Packet

func (*DefaultPacket) Body

func (p *DefaultPacket) Body() []byte

Body 读取body所有字符

func (*DefaultPacket) BodyLen

func (p *DefaultPacket) BodyLen() uint16

BodyLen 报文内容长度

func (*DefaultPacket) Free added in v0.1.2

func (p *DefaultPacket) Free()

Free 释放空间

func (*DefaultPacket) OpCode

func (p *DefaultPacket) OpCode() uint16

OpCode 包的2-3位为OpCode

func (*DefaultPacket) Serialize

func (p *DefaultPacket) Serialize() []byte

Serialize 序列化,输出完整的字符数组

type GameMetaData added in v0.1.2

type GameMetaData struct {
	ID       int64       `json:"id"`       // 实例ID
	Version  string      `json:"version"`  // 当前服务的版本
	Network  string      `json:"network"`  // 传输协议
	UseTLS   bool        `json:"use_tls"`  // 是否启用TLS
	Fuse     bool        `json:"fuse"`     // 熔断开关,true为开启,熔断状态下,服务不接受新连接,等待服务器降到0
	State    int         `json:"state"`    // 状态
	Password string      `json:"password"` // 该服务加密使用的密码
	OutUrl   string      `json:"out_url"`  // 外部访问的URL
	Extra    interface{} `json:"extra"`    // 额外数据,自定义舒勇
}

type Handler

type Handler func(Context) error

Handler 处理类型

type KcpNetConn added in v0.1.1

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

KcpNetConn kcp协议的连接抽象

func (*KcpNetConn) Close added in v0.1.1

func (k *KcpNetConn) Close()

Close 关闭连接

func (*KcpNetConn) ReadPacket added in v0.1.1

func (k *KcpNetConn) ReadPacket() (Packet, error)

ReadPacket 读取数据包

func (*KcpNetConn) WritePacket added in v0.1.1

func (k *KcpNetConn) WritePacket(p Packet) error

WritePacket 写入数据包

type KcpNetListener added in v0.1.1

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

KcpNetListener kcp连接监听器

func (*KcpNetListener) Accept added in v0.1.1

func (l *KcpNetListener) Accept() (NetConn, error)

Accept 接收连接

func (*KcpNetListener) Close added in v0.1.1

func (l *KcpNetListener) Close()

Close 关闭连接监听器

type Listener

type Listener func(*Session) error

Listener 监听器

type Middleware

type Middleware struct {
	// Condition 是否要处理的opcode
	Condition func(uint16) bool
	// Do 处理执行
	Do func(Context) error
}

Middleware 中间件处理

type Module added in v0.1.6

type Module interface {

	// 初始化模块
	Init(app *App)
}

Module 模块

type NetConfig added in v0.1.1

type NetConfig struct {
	Addr         string        // 监听地址
	TLSConfig    *tls.Config   // TLS配置
	WriteTimeout time.Duration // 写入超时
	ReadeTimeout time.Duration // 读取超时

	WebSocketPath string // ws连接的升级使用地址
	KcpMode       string // kcp的模式
}

NetConfig 配置

type NetConn added in v0.1.1

type NetConn interface {

	// ReadPacket 读取报文
	ReadPacket() (Packet, error)

	// WritePacket 写入报文
	WritePacket(Packet) error

	// Close 关闭连接
	Close()
}

NetConn 传输协议的抽象

func NewKcpNetConn added in v0.1.1

func NewKcpNetConn(c net.Conn, config *NetConfig) NetConn

NewKcpNetConn 创建一个kcp连接

func NewTcpNetConn added in v0.1.1

func NewTcpNetConn(c net.Conn, config *NetConfig) NetConn

NewTcpNetConn 创建一个Tcp连接

func NewWebSocketNetConn added in v0.1.1

func NewWebSocketNetConn(c *websocket.Conn, config *NetConfig) NetConn

NewWebSocketNetConn 读取WebSocket连接

type NetListener added in v0.1.1

type NetListener interface {
	// Accept 接收一个连接
	Accept() (NetConn, error)

	// Close 关闭连接
	Close()
}

NetListener 接收请求的监听器

func NewKcpNetListener added in v0.1.1

func NewKcpNetListener(config NetConfig) (NetListener, error)

NewKcpNetListener 创建一个kcp连接监听器

func NewTcpNetListener added in v0.1.1

func NewTcpNetListener(config NetConfig) (NetListener, error)

NewTcpNetListener 创建一个tcp连接监听器

func NewWebSocketNetListener added in v0.1.1

func NewWebSocketNetListener(config NetConfig) (NetListener, error)

NewWebSocketNetListener 创建Websocket监听器

type Packet

type Packet interface {
	// Serialize 序列化
	Serialize() []byte

	// OpeCode 获取该包的OpCode
	OpCode() uint16

	// BodyLen 内容长度
	BodyLen() uint16

	// Body 获取完整body
	Body() []byte

	// Free 释放空间
	Free()
}

Packet 包接口

var (
	HeartPacket Packet = NewDefaultPacket(nil, 0)

	DefaultPacketPool = sync.Pool{
		New: func() interface{} {
			return new(DefaultPacket)
		},
	}
)

HeartPacket 默认使用0号协议作为心跳包的协议

func CretaePbPacket

func CretaePbPacket(opcode uint16, msg proto.Message) (Packet, error)

CretaePbPacket 创建要给protobuf的包

func NewPacket added in v0.1.1

func NewPacket(buff []byte) Packet

NewPacket 从一份数据字节中构造Packet

func Packing

func Packing(r io.Reader) (Packet, error)

Packing 从io流中读取出包

type PushActorMessage added in v0.0.4

type PushActorMessage struct {
	UserID int64  `json:"user_id"`
	OpCode uint16 `json:"opcode"`
	Msg    []byte `json:"msg"`
}

PushActorMessage 发送消息给远程玩家

type Session

type Session struct {
	ID int64 // session的唯一标识
	// contains filtered or unexported fields
}

Session 网络会话

func NewSession

func NewSession(conn NetConn, app *App) *Session

NewSession 新建一个Session

func (*Session) App added in v0.1.5

func (s *Session) App() *App

func (*Session) Close

func (s *Session) Close()

Close 关闭Session

func (*Session) IsClosed

func (s *Session) IsClosed() bool

IsClosed 是否关闭

func (*Session) IsExipred added in v0.1.5

func (s *Session) IsExipred() bool

IsExipred 判断Session是否已经过期

func (*Session) IsValid

func (s *Session) IsValid() bool

IsValid 是否验证为有效连接

func (*Session) Run

func (s *Session) Run()

Run 执行主体逻辑,三套循环 readLoop 读循环 writeLoop 写循环 handleLopp 处理消息循环

func (*Session) SetExpired added in v0.1.5

func (s *Session) SetExpired(expired int64)

SetExpired 设置session的过期时间

func (*Session) SetUserData

func (s *Session) SetUserData(d interface{})

SetUserData 设置玩家的额外数据

func (*Session) SetUserID added in v0.0.4

func (s *Session) SetUserID(userID int64)

SetUserID 设置玩家ID

func (*Session) UserData

func (s *Session) UserData() interface{}

UserData 获取玩家的额外数据

func (*Session) UserID

func (s *Session) UserID() int64

UserID 获取玩家的UserID

func (*Session) WritePacket

func (s *Session) WritePacket(p Packet) (err error)

WritePacket 写入发送包

type SessionCallback

type SessionCallback interface {

	// OnConnect 当连接建立时调用
	OnConnect(*Session) bool

	// OnHeartbeat 当心跳包到达时处理
	OnHeartbeat(*Session)

	// OnMessage 当连接处理消息时
	OnMessage(*Session, Packet) bool

	// OnDisConnect 当连接断开时
	OnDisConnect(*Session)
}

SessionCallback session触发外部事件调用

type SessionCreator

type SessionCreator func(net.Conn, *App) *Session

SessionCreator session创建生成器,做一些预处理

type TcpNetConn added in v0.1.1

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

TcpNetConn tpc协议的连接抽象

func (*TcpNetConn) Close added in v0.1.1

func (t *TcpNetConn) Close()

Clost 关闭连接

func (*TcpNetConn) ReadPacket added in v0.1.1

func (t *TcpNetConn) ReadPacket() (Packet, error)

ReadPacket 读取数据报文

func (*TcpNetConn) WritePacket added in v0.1.1

func (t *TcpNetConn) WritePacket(p Packet) error

WritePacket 写入数据报文

type TcpNetListener added in v0.1.1

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

TcpNetListener tcp连接监听器

func (*TcpNetListener) Accept added in v0.1.1

func (l *TcpNetListener) Accept() (NetConn, error)

Accept 接收连接

func (*TcpNetListener) Close added in v0.1.1

func (l *TcpNetListener) Close()

Close 关闭连接监听器

type UserNats added in v0.1.2

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

UserNats 向用户发送消息

func NewUserNats added in v0.1.2

func NewUserNats(natsUrl string, serverName string) (*UserNats, error)

NewUserNats 创建一个向用户发送消息的nats

func (*UserNats) Close added in v0.1.2

func (u *UserNats) Close()

Close 关闭

func (*UserNats) Consume added in v0.1.2

func (u *UserNats) Consume() <-chan PushActorMessage

Consume 读取消费到的用户消息

func (*UserNats) Publish added in v0.1.2

func (u *UserNats) Publish(userID int64, p Packet) error

Puslish 发送用户消息

func (*UserNats) StartSubscribe added in v0.1.2

func (u *UserNats) StartSubscribe(subLimit int) error

StartSubscribe 开始消费用户消息

type WebSocketNetConn added in v0.1.1

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

WebSocketNetConn Websocket协议的连接抽象

func (*WebSocketNetConn) Close added in v0.1.1

func (w *WebSocketNetConn) Close()

Close 关闭连接

func (*WebSocketNetConn) ReadPacket added in v0.1.1

func (w *WebSocketNetConn) ReadPacket() (Packet, error)

ReadPacket 读取数据包

func (*WebSocketNetConn) WritePacket added in v0.1.1

func (w *WebSocketNetConn) WritePacket(p Packet) error

WritePacket 写入数据包

type WebSocketNetListener added in v0.1.1

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

WebSocketNetListener websocket连接的监听器

func (*WebSocketNetListener) Accept added in v0.1.1

func (l *WebSocketNetListener) Accept() (NetConn, error)

Accept 接收请求

func (*WebSocketNetListener) Close added in v0.1.1

func (l *WebSocketNetListener) Close()

Close 关闭连接

Jump to

Keyboard shortcuts

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