package main import ( "mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/core/netlib" "mongo.games.com/game/common" "mongo.games.com/game/proto" "mongo.games.com/game/protocol/gamehall" ) type CSCoinSceneGetPlayerNumPacketFactory struct { } type CSCoinSceneGetPlayerNumHandler struct { } func (this *CSCoinSceneGetPlayerNumPacketFactory) CreatePacket() interface{} { pack := &gamehall.CSCoinSceneGetPlayerNum{} return pack } func (this *CSCoinSceneGetPlayerNumHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error { logger.Logger.Trace("CSCoinSceneGetPlayerNumHandler Process recv ", data) if msg, ok := data.(*gamehall.CSCoinSceneGetPlayerNum); ok { p := PlayerMgrSington.GetOnlinePlayer(sid) if p != nil { nums := CoinSceneMgrSingleton.GetPlayerNums(p, msg.GetGameId(), msg.GetGameModel()) pack := &gamehall.SCCoinSceneGetPlayerNum{ Nums: nums, } proto.SetDefaults(pack) p.SendToClient(int(gamehall.CoinSceneGamePacketID_PACKET_SC_COINSCENE_GETPLAYERNUM), pack) } } return nil } //type CSCoinSceneOpPacketFactory struct { //} //type CSCoinSceneOpHandler struct { //} // //func (this *CSCoinSceneOpPacketFactory) CreatePacket() interface{} { // pack := &gamehall.CSCoinSceneOp{} // return pack //} // //func (this *CSCoinSceneOpHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error { // logger.Logger.Trace("CSCoinSceneOpHandler Process recv ", data) // if msg, ok := data.(*gamehall.CSCoinSceneOp); ok { // p := PlayerMgrSington.GetOnlinePlayer(sid) // if p != nil { // var ret gamehall.OpResultCode // pack := &gamehall.SCCoinSceneOp{ // Id: msg.Id, // OpType: msg.OpType, // } // // oldPlatform := p.Platform // switch msg.GetOpType() { // case common.CoinSceneOp_Enter: // //pt := PlatformMgrSingleton.GetPackageTag(p.PackageID) // //if pt != nil && pt.IsForceBind == 1 { // // if p.BeUnderAgentCode == "" || p.BeUnderAgentCode == "0" { // // ret = gamehall.OpResultCode_OPRC_MustBindPromoter // // goto done // // } // //} // // //已经在房间里了直接返回 // if p.scene != nil { // logger.Logger.Warnf("CSCoinSceneOpHandler CoinSceneOp_Enter found snid:%v had in scene:%v gameid:%v", p.SnId, p.scene.sceneId, p.scene.gameId) // p.ReturnScene(false) // return nil // } // // var roomId int32 // params := msg.GetOpParams() // if len(params) != 0 { // roomId = params[0] // platformName := CoinSceneMgrSingleton.GetPlatformBySceneId(int(roomId)) // if p.IsRob { // p.Platform = platformName // } else if p.GMLevel > 0 && p.Platform == platformName { //允许GM直接按房间ID进场 // roomId = params[0] // } // } // if len(msg.GetPlatform()) > 0 && p.IsRob { // p.Platform = msg.GetPlatform() // } // //检测房间状态是否开启 // gps := PlatformMgrSingleton.GetGameFree(p.Platform, msg.GetId()) // if gps == nil { // ret = gamehall.OpResultCode_OPRC_RoomHadClosed // goto done // } // // dbGameFree := gps.DbGameFree // if dbGameFree == nil { // ret = gamehall.OpResultCode_OPRC_RoomHadClosed // goto done // } // // if len(params) != 0 && (p.GMLevel > 0 || dbGameFree.GetCreateRoomNum() != 0) { //允许GM|或者可选房间的游戏直接按房间ID进场 // s := SceneMgrSingleton.GetScene(int(params[0])) // if s != nil { // if s.platform.IdStr == p.Platform || (s.groupId != 0 && s.groupId == gps.GroupId) { // roomId = params[0] // } // } // } // // if dbGameFree.GetLimitCoin() != 0 && int64(dbGameFree.GetLimitCoin()) > p.Coin { // ret = gamehall.OpResultCode_OPRC_CoinNotEnough // goto done // } // // if dbGameFree.GetMaxCoinLimit() != 0 && int64(dbGameFree.GetMaxCoinLimit()) < p.Coin && !p.IsRob { // ret = gamehall.OpResultCode_OPRC_CoinTooMore // goto done // } // // //检查游戏次数限制 // if !p.IsRob { // todayData, _ := p.GetDaliyGameData(int(dbGameFree.GetId())) // if dbGameFree.GetPlayNumLimit() != 0 && // todayData != nil && // todayData.GameTimes >= int64(dbGameFree.GetPlayNumLimit()) { // ret = gamehall.OpResultCode_OPRC_RoomGameTimes // goto done // } // } // excludeSceneIds := p.lastSceneId[msg.GetId()] // //临时修改 // var NewSceneIds = make([]int32, len(excludeSceneIds)) // copy(NewSceneIds, excludeSceneIds) // if len(NewSceneIds) > 1 { // NewSceneIds = NewSceneIds[len(NewSceneIds)-1:] // } // //-------------------------- // ret = CoinSceneMgrSingleton.PlayerEnter(p, msg.GetId(), roomId, NewSceneIds, false) // if p.scene != nil { // pack.OpParams = append(pack.OpParams, int32(p.scene.sceneId)) // //TODO 有房间还进入失败,尝试returnroom // if ret != gamehall.OpResultCode_OPRC_Sucess { // p.ReturnScene(false) // } // } // case common.CoinSceneOp_Leave: // ret = CoinSceneMgrSingleton.PlayerTryLeave(p, msg.GetId(), false) // if gamehall.OpResultCode_OPRC_OpYield == ret { // return nil // } // case common.CoinSceneOp_Change: // if p.scene == nil { // ret = gamehall.OpResultCode_OPRC_RoomHadClosed // goto done // } // var exclude = int32(p.scene.sceneId) // params := msg.GetOpParams() // if len(params) != 0 { // exclude = params[0] // } // if p.scene.IsPrivateScene() { // //if ClubSceneMgrSington.PlayerInChanging(p) { // // return nil // //} // //ret = ClubSceneMgrSington.PlayerTryChange(p, msg.GetId(), []int32{exclude}, false) // } else { // if CoinSceneMgrSingleton.PlayerInChanging(p) { //换桌中 // return nil // } // excludeSceneIds := p.lastSceneId[msg.GetId()] // if exclude != 0 { // excludeSceneIds = append(excludeSceneIds, exclude) // } // ret = CoinSceneMgrSingleton.PlayerTryChange(p, msg.GetId(), excludeSceneIds, false) // } // // case common.CoinSceneOp_AudienceEnter: // var roomId int32 // params := msg.GetOpParams() // if len(params) != 0 && !p.IsRob { // roomId = params[0] // } // ret = CoinSceneMgrSingleton.AudienceEnter(p, msg.GetId(), roomId, nil, false) // case common.CoinSceneOp_AudienceLeave: // ret = CoinSceneMgrSingleton.PlayerTryLeave(p, msg.GetId(), true) // if gamehall.OpResultCode_OPRC_OpYield == ret { // return nil // } // case common.CoinSceneOp_AudienceChange: // var exclude int32 // if p.scene != nil { // exclude = int32(p.scene.sceneId) // } // params := msg.GetOpParams() // if len(params) != 0 { // exclude = params[0] // } // if CoinSceneMgrSingleton.PlayerInChanging(p) { //换桌中 // return nil // } // excludeSceneIds := p.lastSceneId[msg.GetId()] // if exclude != 0 { // excludeSceneIds = append(excludeSceneIds, exclude) // } // ret = CoinSceneMgrSingleton.PlayerTryChange(p, msg.GetId(), excludeSceneIds, true) // case common.CoinSceneOP_Server: // if p.scene == nil { // ret = gamehall.OpResultCode_OPRC_RoomHadClosed // goto done // } // gameFreeId := p.scene.dbGameFree.GetId() // gameConfig := PlatformMgrSingleton.GetGameFree(p.Platform, gameFreeId) // if gameConfig != nil && gameConfig.DbGameFree.GetMatchMode() == 1 { // return nil // } // var exclude = int32(p.scene.sceneId) // params := msg.GetOpParams() // if len(params) != 0 { // exclude = params[0] // } // if p.scene.IsPrivateScene() { // //if ClubSceneMgrSington.PlayerInChanging(p) { // // return nil // //} // //ret = ClubSceneMgrSington.PlayerTryChange(p, msg.GetId(), []int32{exclude}, false) // } else { // if CoinSceneMgrSingleton.PlayerInChanging(p) { //换桌中 // return nil // } // excludeSceneIds := p.lastSceneId[msg.GetId()] // if exclude != 0 { // excludeSceneIds = append(excludeSceneIds, exclude) // } // ret = CoinSceneMgrSingleton.PlayerTryChange(p, msg.GetId(), excludeSceneIds, false) // } // } // done: // //机器人要避免身上的平台标记被污染 // if p.IsRob { // if !(ret == gamehall.OpResultCode_OPRC_Sucess || // ret == gamehall.OpResultCode_OPRC_CoinSceneEnterQueueSucc) { // p.Platform = oldPlatform // } // } // pack.OpCode = ret // proto.SetDefaults(pack) // p.SendToClient(int(gamehall.CoinSceneGamePacketID_PACKET_SC_COINSCENE_OP), pack) // if msg.GetOpType() == common.CoinSceneOp_Enter && ret == gamehall.OpResultCode_OPRC_Sucess && p.scene != nil { // gameName := p.scene.dbGameFree.GetName() + p.scene.dbGameFree.GetTitle() // ActMonitorMgrSington.SendActMonitorEvent(ActState_Game, p.SnId, p.Name, p.Platform, // 0, 0, gameName, 0) // } // } // } // return nil //} //type CSCoinSceneListRoomPacketFactory struct { //} //type CSCoinSceneListRoomHandler struct { //} // //func (this *CSCoinSceneListRoomPacketFactory) CreatePacket() interface{} { // pack := &gamehall.CSCoinSceneListRoom{} // return pack //} // //func (this *CSCoinSceneListRoomHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error { // logger.Logger.Trace("CSCoinSceneListRoomHandler Process recv ", data) // if msg, ok := data.(*gamehall.CSCoinSceneListRoom); ok { // p := PlayerMgrSington.GetOnlinePlayer(sid) // if p != nil { // if !CoinSceneMgrSingleton.ListRooms(p, msg.GetId()) { // 场次id // pack := &gamehall.SCCoinSceneListRoom{ // Id: msg.Id, // } // proto.SetDefaults(pack) // p.SendToClient(int(gamehall.CoinSceneGamePacketID_PACKET_SC_COINSCENE_LISTROOM), pack) // } // } // } // // return nil //} func init() { // 获取金币场房间人数 common.RegisterHandler(int(gamehall.CoinSceneGamePacketID_PACKET_CS_COINSCENE_GETPLAYERNUM), &CSCoinSceneGetPlayerNumHandler{}) netlib.RegisterFactory(int(gamehall.CoinSceneGamePacketID_PACKET_CS_COINSCENE_GETPLAYERNUM), &CSCoinSceneGetPlayerNumPacketFactory{}) // 金币场操作;进入场次,离开场次等 //common.RegisterHandler(int(gamehall.CoinSceneGamePacketID_PACKET_CS_COINSCENE_OP), &CSCoinSceneOpHandler{}) //netlib.RegisterFactory(int(gamehall.CoinSceneGamePacketID_PACKET_CS_COINSCENE_OP), &CSCoinSceneOpPacketFactory{}) // 获取金币场房间列表 //common.RegisterHandler(int(gamehall.CoinSceneGamePacketID_PACKET_CS_COINSCENE_LISTROOM), &CSCoinSceneListRoomHandler{}) //netlib.RegisterFactory(int(gamehall.CoinSceneGamePacketID_PACKET_CS_COINSCENE_LISTROOM), &CSCoinSceneListRoomPacketFactory{}) }