335 lines
9.5 KiB
Go
335 lines
9.5 KiB
Go
package main
|
|
|
|
//
|
|
//import (
|
|
// "mongo.games.com/game/common"
|
|
// "mongo.games.com/game/proto"
|
|
// "mongo.games.com/game/protocol/mngame"
|
|
// server_proto "mongo.games.com/game/protocol/server"
|
|
// webapi_proto "mongo.games.com/game/protocol/webapi"
|
|
// "mongo.games.com/game/srvdata"
|
|
// "mongo.games.com/goserver/core/logger"
|
|
// "mongo.games.com/goserver/srvlib"
|
|
// srvlibproto "mongo.games.com/goserver/srvlib/protocol"
|
|
//)
|
|
//
|
|
//var MiniGameMgrSington = &MiniGameMgr{
|
|
// //按平台管理
|
|
// scenesOfPlatform: make(map[string]map[int32]*Scene),
|
|
// //玩家当前打开的小游戏列表
|
|
// playerGaming: make(map[int32]map[int32]*Scene),
|
|
// autoId: common.MiniGameSceneStartId,
|
|
//}
|
|
//
|
|
//type MiniGameMgr struct {
|
|
// BasePlayerListener
|
|
// //按平台管理
|
|
// scenesOfPlatform map[string]map[int32]*Scene
|
|
// //玩家当前打开的小游戏列表
|
|
// playerGaming map[int32]map[int32]*Scene
|
|
// autoId int
|
|
//}
|
|
//
|
|
//func (this *MiniGameMgr) GenOneSceneId() int {
|
|
// this.autoId++
|
|
// if this.autoId > common.MiniGameSceneMaxId {
|
|
// this.autoId = common.MiniGameSceneStartId
|
|
// }
|
|
// return this.autoId
|
|
//}
|
|
//
|
|
//func (this *MiniGameMgr) PlayerEnter(p *Player, id int32) mngame.MNGameOpResultCode {
|
|
// plt := p.GetPlatform()
|
|
// s := this.GetScene(plt, id)
|
|
// if s == nil {
|
|
// return mngame.MNGameOpResultCode_MNGAME_OPRC_Error
|
|
// }
|
|
//
|
|
// if !s.PlayerEnterMiniGame(p) {
|
|
// return mngame.MNGameOpResultCode_MNGAME_OPRC_Error
|
|
// }
|
|
//
|
|
// gamings, ok := this.playerGaming[p.SnId]
|
|
// if !ok {
|
|
// gamings = make(map[int32]*Scene)
|
|
// this.playerGaming[p.SnId] = gamings
|
|
// }
|
|
// gamings[id] = s
|
|
//
|
|
// return mngame.MNGameOpResultCode_MNGAME_OPRC_Sucess
|
|
//}
|
|
//
|
|
//func (this *MiniGameMgr) PlayerLeave(p *Player, id int32) mngame.MNGameOpResultCode {
|
|
// plt := p.GetPlatform()
|
|
// s := this.GetScene(plt, id)
|
|
// if s == nil {
|
|
// return mngame.MNGameOpResultCode_MNGAME_OPRC_Error
|
|
// }
|
|
//
|
|
// if !s.PlayerLeaveMiniGame(p) {
|
|
// return mngame.MNGameOpResultCode_MNGAME_OPRC_Error
|
|
// }
|
|
//
|
|
// gamings, ok := this.playerGaming[p.SnId]
|
|
// if ok {
|
|
// delete(gamings, id)
|
|
// }
|
|
//
|
|
// return mngame.MNGameOpResultCode_MNGAME_OPRC_Sucess
|
|
//}
|
|
//
|
|
//func (this *MiniGameMgr) PlayerMsgDispatcher(p *Player, msg *mngame.CSMNGameDispatcher) {
|
|
// plt := p.GetPlatform()
|
|
// s := this.GetScene(plt, msg.GetId())
|
|
// if s == nil {
|
|
// logger.Logger.Errorf("MiniGameMgr.PlayerMsgDispatcher Can't find scene! plt:%v gameId:%v", plt, msg.GetId())
|
|
// return
|
|
// }
|
|
//
|
|
// //minigamesrv 重启容错
|
|
// if !s.HasPlayer(p) {
|
|
// this.PlayerEnter(p, msg.GetId())
|
|
// }
|
|
// s.RedirectMiniGameMsg(p, msg)
|
|
//}
|
|
//
|
|
//func (this *MiniGameMgr) GetScene(p *Platform, id int32) *Scene {
|
|
// scenes, ok := this.scenesOfPlatform[p.IdStr]
|
|
// if !ok {
|
|
// scenes = make(map[int32]*Scene)
|
|
// this.scenesOfPlatform[p.IdStr] = scenes
|
|
// }
|
|
//
|
|
// s, ok := scenes[id]
|
|
// if !ok {
|
|
// cfg := PlatformMgrSingleton.GetGameFree(p.IdStr, id)
|
|
// if cfg != nil && cfg.Status && cfg.DbGameFree.GetGameType() == common.GameType_Mini {
|
|
// s = this.CreateSceneByPlatform(p, cfg)
|
|
// if s != nil {
|
|
// scenes[cfg.DbGameFree.Id] = s
|
|
// } else {
|
|
// return nil
|
|
// }
|
|
// return s
|
|
// } else {
|
|
// return nil
|
|
// }
|
|
// } else {
|
|
// return s
|
|
// }
|
|
// //return nil
|
|
//}
|
|
//
|
|
//func (this *MiniGameMgr) CreateSceneByPlatform(p *Platform, cfg *webapi_proto.GameFree) *Scene {
|
|
// sceneId := this.GenOneSceneId()
|
|
// gameId := int(cfg.DbGameFree.GetGameId())
|
|
// gs := GameSessMgrSington.GetMinLoadSess(gameId)
|
|
// if gs == nil {
|
|
// logger.Logger.Errorf("MiniGameMgr.CreateSceneByPlatform Get %v game min session failed.", gameId)
|
|
// return nil
|
|
// }
|
|
// if gs != nil {
|
|
// gameMode := cfg.DbGameFree.GetGameMode()
|
|
// dbGameRule := srvdata.PBDB_GameRuleMgr.GetData(cfg.DbGameFree.GetGameRule())
|
|
// params := dbGameRule.GetParams()
|
|
// scene := SceneMgrSington.CreateScene(0, 0, sceneId, gameId, int(gameMode), common.SceneMode_Public, 1, -1, params,
|
|
// gs, p, cfg.GroupId, cfg.DbGameFree, cfg.DbGameFree.Id)
|
|
// if scene != nil {
|
|
// scene.hallId = cfg.DbGameFree.Id
|
|
// return scene
|
|
// }
|
|
// }
|
|
// return nil
|
|
//}
|
|
//
|
|
//func (this *MiniGameMgr) OnPlatformCreate(p *Platform) {
|
|
// if p == nil {
|
|
// return
|
|
// }
|
|
// scenes := make(map[int32]*Scene)
|
|
// this.scenesOfPlatform[p.IdStr] = scenes
|
|
//
|
|
// gps := PlatformMgrSingleton.GetGameFrees(p.IdStr)
|
|
// for _, v := range gps {
|
|
// if v.Status && v.DbGameFree.GetGameType() == common.GameType_Mini {
|
|
// s := this.CreateSceneByPlatform(p, v)
|
|
// if s != nil {
|
|
// scenes[v.DbGameFree.Id] = s
|
|
// }
|
|
// }
|
|
// }
|
|
//}
|
|
//
|
|
//func (this *MiniGameMgr) OnPlatformDestroy(p *Platform) {
|
|
// if p == nil {
|
|
// return
|
|
// }
|
|
// if scenes, ok := this.scenesOfPlatform[p.IdStr]; ok {
|
|
// for _, s := range scenes {
|
|
// pack := &server_proto.WGGraceDestroyScene{}
|
|
// pack.Ids = append(pack.Ids, int32(s.sceneId))
|
|
// s.SendToGame(int(server_proto.SSPacketID_PACKET_WG_GRACE_DESTROYSCENE), pack)
|
|
// }
|
|
// delete(this.scenesOfPlatform, p.IdStr)
|
|
// }
|
|
//}
|
|
//
|
|
//func (this *MiniGameMgr) OnPlatformChangeIsolated(p *Platform, isolated bool) {
|
|
// if p == nil {
|
|
// return
|
|
// }
|
|
// if !isolated {
|
|
// this.OnPlatformDestroy(p)
|
|
// }
|
|
//}
|
|
//
|
|
//func (this *MiniGameMgr) OnPlatformChangeDisabled(p *Platform, disabled bool) {
|
|
// if p == nil {
|
|
// return
|
|
// }
|
|
// if disabled {
|
|
// this.OnPlatformDestroy(p)
|
|
// } else {
|
|
// this.OnPlatformCreate(p)
|
|
// }
|
|
//}
|
|
//
|
|
//func (this *MiniGameMgr) OnPlatformGameFreeUpdate(p *Platform, oldCfg, newCfg *webapi_proto.GameFree) {
|
|
// if p == nil {
|
|
// return
|
|
// }
|
|
// if scenes, ok := this.scenesOfPlatform[p.IdStr]; ok {
|
|
// if oldCfg != nil {
|
|
// if s, ok := scenes[oldCfg.DbGameFree.Id]; ok {
|
|
// pack := &server_proto.WGGraceDestroyScene{}
|
|
// pack.Ids = append(pack.Ids, int32(s.sceneId))
|
|
// s.SendToGame(int(server_proto.SSPacketID_PACKET_WG_GRACE_DESTROYSCENE), pack)
|
|
// delete(scenes, oldCfg.DbGameFree.Id)
|
|
// }
|
|
// } else if newCfg != nil {
|
|
// if newCfg.Status && newCfg.DbGameFree.GetGameType() == common.GameType_Mini {
|
|
// s := this.CreateSceneByPlatform(p, newCfg)
|
|
// if s != nil {
|
|
// scenes[newCfg.DbGameFree.Id] = s
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
//}
|
|
//
|
|
//func (this *MiniGameMgr) OnGameGroupUpdate(oldCfg, newCfg *webapi_proto.GameConfigGroup) {
|
|
// //donothing
|
|
//}
|
|
//
|
|
///*
|
|
//获取platform下面对应的 player SnId所在的scene
|
|
//*/
|
|
//func (this *MiniGameMgr) GetAllSceneByPlayer(p *Player) map[int32]*Scene {
|
|
// if gameingScenes, ok := this.playerGaming[p.SnId]; ok {
|
|
// return gameingScenes
|
|
// }
|
|
// return nil
|
|
//}
|
|
//
|
|
//func (this *MiniGameMgr) OnPlayerDropLine(p *Player) {
|
|
// this.BasePlayerListener.OnPlayerDropLine(p)
|
|
// if gamingScenes, ok := this.playerGaming[p.SnId]; ok {
|
|
// for _, s := range gamingScenes {
|
|
// pack := &server_proto.WGPlayerDropLine{
|
|
// Id: proto.Int32(p.SnId),
|
|
// SceneId: proto.Int(s.sceneId),
|
|
// }
|
|
// proto.SetDefaults(pack)
|
|
// s.SendToGame(int(server_proto.SSPacketID_PACKET_WG_PLAYERDROPLINE), pack)
|
|
// }
|
|
// }
|
|
//}
|
|
//
|
|
//func (this *MiniGameMgr) OnPlayerRehold(p *Player) {
|
|
// this.BasePlayerListener.OnPlayerRehold(p)
|
|
// var gateSid int64
|
|
// if p.gateSess != nil {
|
|
// if srvInfo, ok := p.gateSess.GetAttribute(srvlib.SessionAttributeServerInfo).(*srvlibproto.SSSrvRegiste); ok && srvInfo != nil {
|
|
// sessionId := srvlib.NewSessionIdEx(srvInfo.GetAreaId(), srvInfo.GetType(), srvInfo.GetId(), 0)
|
|
// gateSid = sessionId.Get()
|
|
// }
|
|
// }
|
|
// if gamingScenes, ok := this.playerGaming[p.SnId]; ok {
|
|
// for _, s := range gamingScenes {
|
|
// pack := &server_proto.WGPlayerRehold{
|
|
// Id: proto.Int32(p.SnId),
|
|
// Sid: proto.Int64(p.sid),
|
|
// SceneId: proto.Int(s.sceneId),
|
|
// GateSid: proto.Int64(gateSid),
|
|
// }
|
|
// proto.SetDefaults(pack)
|
|
// s.SendToGame(int(server_proto.SSPacketID_PACKET_WG_PLAYERREHOLD), pack)
|
|
// }
|
|
// }
|
|
//}
|
|
//func (this *MiniGameMgr) OnPlayerReturnScene(p *Player) {
|
|
// this.BasePlayerListener.OnPlayerReturnScene(p)
|
|
// if gameingScenes, ok := this.playerGaming[p.SnId]; ok {
|
|
// for _, s := range gameingScenes {
|
|
// pack := &server_proto.WGPlayerReturn{
|
|
// PlayerId: p.SnId,
|
|
// RoomId: int32(s.sceneId),
|
|
// }
|
|
// proto.SetDefaults(pack)
|
|
// s.SendToGame(int(server_proto.SSPacketID_PACKET_WG_PLAYERRETURN), pack)
|
|
// }
|
|
// }
|
|
//}
|
|
//
|
|
//func (this *MiniGameMgr) OnDestroyScene(s *Scene) {
|
|
//
|
|
// if pltScenes, ok := this.scenesOfPlatform[s.limitPlatform.IdStr]; ok {
|
|
// delete(pltScenes, s.dbGameFree.Id)
|
|
// }
|
|
//
|
|
// for snid, _ := range s.players {
|
|
// if scenes, ok := this.playerGaming[snid]; ok {
|
|
// delete(scenes, s.dbGameFree.Id)
|
|
// if len(scenes) == 0 {
|
|
// delete(this.playerGaming, snid)
|
|
// }
|
|
// }
|
|
// }
|
|
//}
|
|
//
|
|
//func (this *MiniGameMgr) ClrPlayerWhiteBlackState(p *Player) {
|
|
// if gamings, ok := this.playerGaming[p.SnId]; ok {
|
|
// for _, s := range gamings {
|
|
// pack := &server_proto.WGSetPlayerBlackLevel{
|
|
// SnId: proto.Int32(p.SnId),
|
|
// SceneId: proto.Int32(int32(s.sceneId)),
|
|
// ResetTotalCoin: proto.Bool(true),
|
|
// }
|
|
// proto.SetDefaults(pack)
|
|
// s.SendToGame(int(server_proto.SSPacketID_PACKET_GW_AUTORELIEVEWBLEVEL), pack)
|
|
// }
|
|
// }
|
|
//}
|
|
//
|
|
//func (this *MiniGameMgr) OnPlatformDestroyByGameFreeId(p *Platform, gameFreeId int32) {
|
|
// if p == nil {
|
|
// return
|
|
// }
|
|
// if scenes, ok := this.scenesOfPlatform[p.IdStr]; ok {
|
|
// for _, s := range scenes {
|
|
// if s.dbGameFree.Id == gameFreeId {
|
|
// pack := &server_proto.WGGraceDestroyScene{}
|
|
// pack.Ids = append(pack.Ids, int32(s.sceneId))
|
|
// s.SendToGame(int(server_proto.SSPacketID_PACKET_WG_GRACE_DESTROYSCENE), pack)
|
|
// delete(scenes, gameFreeId)
|
|
// }
|
|
// }
|
|
// }
|
|
//}
|
|
//
|
|
//func init() {
|
|
// RegistePlayerListener(MiniGameMgrSington)
|
|
// PlatformMgrSingleton.RegisterObserver(MiniGameMgrSington)
|
|
// PlatformGameGroupMgrSington.RegisterObserver(MiniGameMgrSington)
|
|
//}
|