Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var ( ErrRoomClosed = errors.New("newbee: room is closed") ErrRoomRunning = errors.New("newbee: room is running") ErrRoomNotRunning = errors.New("newbee: room is not running") ErrNilGame = errors.New("newbee: game is nil") ErrPlayerExists = errors.New("newbee: player already exists") ErrPlayerNotExist = errors.New("newbee: player not exist") ErrInvalidPlayer = errors.New("newbee: invalid player") ErrNilPlayer = errors.New("newbee: player is nil") ErrFailedToRun = errors.New("newbee: failed to run the room") ErrBadSession = errors.New("newbee: bad session") ErrBadInterval = errors.New("newbee: bad interval") )
Functions ¶
This section is empty.
Types ¶
type Game ¶
type Game interface {
// GetId 获取游戏 id
GetId() int64
// GetState 游戏状态
GetState() GameState
// TickInterval 返回刷新时间间隔,Room 将按照该时间间隔调用 OnTick() 方法,返回小于等于 0 的时候,将禁用定时刷新
TickInterval() time.Duration
// OnTick 定时器,Room 会定时调用,如果此方法返回 false,Room 将关闭
OnTick()
// OnMessage 处理客户端消息
OnMessage(player Player, message interface{})
// OnDequeue 处理自定义消息
OnDequeue(message interface{})
// OnRunInRoom Room 启动成功之后会调用此方法
OnRunInRoom(room Room)
// OnJoinRoom 玩家建立网络连接会调用此方法
OnJoinRoom(player Player)
// OnLeaveRoom 玩家断开网络连接会调用此方法
OnLeaveRoom(player Player, err error)
// OnCloseRoom 房间关闭的时候会调用此方法
OnCloseRoom(room Room)
// OnPanic 有未捕获异常的时候会调用此方法
OnPanic(room Room, err error)
}
type Player ¶
type Player interface {
// GetId 获取玩家 id
GetId() int64
// Session 获取连接信息
Session() net4go.Session
// Connected 获取玩家在线状态
Connected() bool
// SendPacket 发送消息
SendPacket(net4go.Packet)
// AsyncSendPacket 异步发送消息
AsyncSendPacket(net4go.Packet)
// Close 关闭玩家
// 注意:不要重写本方法,如果需要清理玩家信息,应该在 Game 的 OnLeaveRoom 中完成
Close() error
}
type Room ¶
type Room interface {
// GetId 获取房间 id
GetId() int64
// GetToken 房间 token
GetToken() string
// GetState 获取房间状态
GetState() RoomState
// GetPlayer 获取玩家信息
GetPlayer(playerId int64) Player
// GetPlayers 获取所有玩家信息
GetPlayers() map[int64]Player
// RangePlayer 只读遍历玩家信息,在回调函数中,不可执行 Room 的其它可以影响玩家列表的操作
RangePlayer(fn func(player Player))
// GetPlayerCount 获取玩家数量
GetPlayerCount() int
// AddPlayer 添加玩家,如果玩家已经存在或者 player 参数为空,会返回相应的错误,如果连接不为空,则将该玩家和连接进行绑定
AddPlayer(player Player) error
// RemovePlayer 移除玩家
RemovePlayer(playerId int64)
// Run 启动
Run(game Game) error
// Enqueue 添加自定义消息
Enqueue(message interface{})
// SendPacket 向指定玩家发送消息
SendPacket(playerId int64, packet net4go.Packet)
// BroadcastPacket 向所有玩家广播消息
BroadcastPacket(packet net4go.Packet)
// Close 关闭房间
Close() error
}
func NewRoom ¶
func NewRoom(id int64, opts ...RoomOption) Room
type RoomOption ¶
type RoomOption func(r *room)
func WithAsync ¶
func WithAsync() RoomOption
WithAsync 网络消息和定时器消息为异步模式 网络消息会放入队列中,定时器消息不会放入队列中 定时器会定时触发,不管上一次的定时任务是否处理完成
func WithFrame ¶
func WithFrame() RoomOption
WithFrame 网络消息和定时器消息为帧模式,同时网络消息的处理由定时器驱动 会启用一个定时器定时处理网络消息,网络消息处理完成之后,会触发游戏的 OnTick 方法
func WithSync ¶
func WithSync() RoomOption
WithSync 网络消息和定时器消息为同步模式 网络消息和定时器消息会放入同一队列等待执行 定时任务放入队列之后,定时器就会暂停,需要等到队列中的定时任务执行之后才会再次激活定时器
func WithToken ¶
func WithToken(token string) RoomOption
func WithWaiter ¶
func WithWaiter(w Waiter) RoomOption
Source Files
¶
Click to show internal directories.
Click to hide internal directories.