package base import ( "fmt" "time" "mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/core/module" "mongo.games.com/game/common" server_proto "mongo.games.com/game/protocol/server" "mongo.games.com/game/srvdata" ) func init() { module.RegisteModule(SceneMgrSingleton, time.Millisecond*100, 0) common.RegisterClockFunc(&common.ClockFunc{ OnHourTimerFunc: func() { logger.Logger.Info(SceneMgrSingleton.GetState()) }, }) } var SceneMgrSingleton = &SceneMgr{ Scenes: make(map[int32]IScene), sceneDBGameFree: make(map[int32]*server_proto.DB_GameFree), } type SceneMgr struct { Scenes map[int32]IScene sceneDBGameFree map[int32]*server_proto.DB_GameFree } func (sm *SceneMgr) AddScene(s IScene) { sm.Scenes[s.GetRoomId()] = s } func (sm *SceneMgr) DelScene(sceneId int32) { delete(sm.Scenes, sceneId) delete(sm.sceneDBGameFree, sceneId) } func (sm *SceneMgr) GetScene(sceneId int32) IScene { if s, exist := sm.Scenes[sceneId]; exist { return s } return nil } func (sm *SceneMgr) UpdateSceneDBGameFree(sceneId int32, dbGameFree *server_proto.DB_GameFree) { sm.sceneDBGameFree[sceneId] = dbGameFree } func (sm *SceneMgr) GetSceneDBGameFree(sceneId, gamefreeId int32) *server_proto.DB_GameFree { if data, exist := sm.sceneDBGameFree[sceneId]; exist { return data } return srvdata.PBDB_GameFreeMgr.GetData(gamefreeId) } // IsFreeMode 是否是自由桌 func (sm *SceneMgr) IsFreeMode(sceneId int32) bool { if data, exist := sm.sceneDBGameFree[sceneId]; exist { return data.GetFreeMode() == 1 } return false } type SceneMgrState struct { Num map[int32]int } func (s *SceneMgrState) String() string { return fmt.Sprintf("SceneMgrState 每个游戏的房间数量 [游戏id:房间数量]: %v", s.Num) } func (sm *SceneMgr) GetState() *SceneMgrState { m := make(map[int32]int) for _, v := range sm.Scenes { m[v.GetGameId()]++ } return &SceneMgrState{Num: m} } // ////////////////////////////////////////////////////////////////// // / Module Implement [beg] // ////////////////////////////////////////////////////////////////// func (sm *SceneMgr) Update() { for _, s := range sm.Scenes { s.Update(time.Now().UnixMilli()) // 毫秒时间戳 } return } func (sm *SceneMgr) Init() { } func (sm *SceneMgr) ModuleName() string { return "SceneMgr-module" } func (sm *SceneMgr) Shutdown() { module.UnregisteModule(sm) }