51 lines
1.8 KiB
Go
51 lines
1.8 KiB
Go
package main
|
||
|
||
import (
|
||
"mongo.games.com/game/protocol/gamehall"
|
||
)
|
||
|
||
var coinScenePools = map[int32]ICoinScenePool{}
|
||
|
||
// RegisterCoinScenePool 注册房间池规则
|
||
func RegisterCoinScenePool(gameId int32, policy ICoinScenePool) {
|
||
coinScenePools[gameId] = policy
|
||
}
|
||
|
||
func GetCoinScenePool(gameId int32) ICoinScenePool {
|
||
return coinScenePools[gameId]
|
||
}
|
||
|
||
// ICoinScenePool 定义房间池规则的接口
|
||
// 公共处理逻辑可以写在 CoinScenePool,不能满足需求时再实现 ICoinScenePool
|
||
type ICoinScenePool interface {
|
||
// New 创建房间池
|
||
New() interface{}
|
||
// CanEnter 玩家是否可以进入
|
||
CanEnter(pool *CoinScenePool, p *Player) gamehall.OpResultCode
|
||
// CanAudienceEnter 观众是否可以进入
|
||
CanAudienceEnter(pool *CoinScenePool, p *Player) gamehall.OpResultCode
|
||
|
||
// PlayerEnter 玩家进入(匹配房间)
|
||
// exclude 排除的房间列表
|
||
// isChangeRoom 是否是换房间
|
||
PlayerEnter(pool *CoinScenePool, p *Player, exclude []int32, isChangeRoom bool) (ret gamehall.OpResultCode, scene *Scene)
|
||
// AudienceEnter 观众进入(匹配房间)
|
||
AudienceEnter(pool *CoinScenePool, p *Player, exclude []int32, isChangeRoom bool) (ret gamehall.OpResultCode, scene *Scene)
|
||
// OnPlayerEnter 玩家进入房间之后
|
||
OnPlayerEnter(pool *CoinScenePool, p *Player, scene *Scene)
|
||
|
||
// PlayerLeave 玩家离开
|
||
PlayerLeave(pool *CoinScenePool, p *Player, reason int) bool
|
||
// AudienceLeave 观众离开
|
||
AudienceLeave(pool *CoinScenePool, p *Player, reason int) bool
|
||
// OnPlayerLeave 玩家离开房间之后
|
||
OnPlayerLeave(pool *CoinScenePool, s *Scene, p *Player)
|
||
|
||
// NewScene 创建房间
|
||
NewScene(pool *CoinScenePool, p *Player) *Scene
|
||
// NewPreCreateScene 创建预创建房间
|
||
NewPreCreateScene(pool *CoinScenePool) *Scene
|
||
// OnDestroyScene 房间解散之后
|
||
OnDestroyScene(pool *CoinScenePool, sceneId int)
|
||
}
|