gameapi

package
v0.0.5 Latest Latest
Warning

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

Go to latest
Published: Apr 13, 2023 License: MIT Imports: 20 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// 向NATS中push推送给其他玩家消息的键
	NatsPushUserK = "GAME_PUSH_USER"
)

Variables

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

Functions

This section is empty.

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) AddHandler

func (a *App) AddHandler(opcode uint16, h Handler)

AddHandler 增加处理器

func (*App) AddModule

func (a *App) AddModule(module Moddule)

AddModule 增加所有模块

func (*App) AddSession added in v0.0.4

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

AddSession 加入Session

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(sesssion *Session)

OnDisConnect 断线处理

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) SetBeforeMiddleware

func (a *App) SetBeforeMiddleware(m Middleware)

SetBeforeMiddleware 设置消息处理前中间件

func (*App) SetConnectListener

func (a *App) SetConnectListener(l Listener)

SetConnectListener 设置连接监听器

func (*App) SetDisconnectListener

func (a *App) SetDisconnectListener(l Listener)

SetDisconnectListener 设置断连监听器

func (*App) Start

func (a *App) Start() error

Start 启动服务

func (*App) Stop

func (a *App) Stop()

Stop 停止服务

type Client added in v0.0.4

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

Client 客户端实现,用于压测和机器人测试

func NewClient added in v0.0.4

func NewClient(conn net.Conn, readLimit int, sendLimit int, heart time.Duration) *Client

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 uint16, msg proto.Message) error

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

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

Context 抽象每个Handler的调用参数

func NewDefaultContext

func NewDefaultContext(ctx context.Context, a *App, session *Session, 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) Params

func (*DefaultContext) Send

func (c *DefaultContext) Send(opcode uint16, msg proto.Message) error

WritePbPacket 写入Protobuf的包

func (*DefaultContext) SendActor added in v0.0.4

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

SendActor 向指定玩家发送消息

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) OpCode

func (p *DefaultPacket) OpCode() uint16

OpCode 包的2-3位为OpCode

func (*DefaultPacket) Serialize

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

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

type Handler

type Handler func(Context) error

Handler 处理类型

type Listener

type Listener func(*Session) error

Listener 监听器

type Middleware

type Middleware func(*Session, Packet) error

Middleware 中间件处理

type Moddule

type Moddule interface {

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

	// 模块的分组路由
	Group() map[uint16]Handler
}

Module 模块

type Packet

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

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

	// BodyLen 内容长度
	BodyLen() uint16

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

Packet 包接口

var HeartPacket Packet = NewDefaultPacket(nil, 0)

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

func CretaePbPacket

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

CretaePbPacket 创建要给protobuf的包

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 {
	// contains filtered or unexported fields
}

Session 网络会话

func NewSession

func NewSession(conn net.Conn, app *App) *Session

NewSession 新建一个Session

func (*Session) Close

func (s *Session) Close()

Close 关闭Session

func (*Session) GetConn

func (s *Session) GetConn() net.Conn

GetConn 获取连接实例

func (*Session) IsClosed

func (s *Session) IsClosed() bool

IsClosed 是否关闭

func (*Session) IsValid

func (s *Session) IsValid() bool

IsValid 是否验证为有效连接

func (*Session) Run

func (s *Session) Run()

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

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

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

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

SessionCallback session触发外部事件调用

type SessionCreator

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

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

Jump to

Keyboard shortcuts

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