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