/// <summary> /// 初始化进入的人,现在只有一个, 金币模式可能会有多个 /// </summary> protected void EnterTable() { List <OtherUserInfoSD> oUserlist = new List <OtherUserInfoSD>(); ForeashAllDoBase((i) => { BaseUser _tempBUser = _pos2userbase[i]; _tempBUser._tbwechatposData.pos = i; _tempBUser._tbwechatposData._isDisconnet = _tempBUser._isDisconnet ? 1 : 0; _tempBUser._tbwechatposData._isReady = _tempBUser._isReady ? 1 : 0; oUserlist.Add(_tempBUser._tbwechatposData); UserStatus us = BaseLobby.instanceBase.GetUserStatusbyUserID(_tempBUser._userid); if (us == null) { ErrorRecord.Record("201611301736 basetable 必须找到的UserID: " + _tempBUser._userid); return; } us.TableID = _tableid; us.Status = UserStatusEnum.InTableWaiting; BaseLobby.instanceBase.AddorUpdateUserStatus(us); }); //通知所有人,有人进入桌子了 List <UserIDMSG> imList = new List <UserIDMSG>(); ForeashAllDoBase((i) => { BaseUser tempUser = _pos2userbase[i]; tempUser._Pos = i; sc_entertable_n _canReady = new sc_entertable_n() { fn = "sc_entertable_n", result = 1, _msgid = 8 }; _canReady.pos = tempUser._Pos; _canReady.tableid = _tableid; _canReady.gameid = _gameid;//客服端好做分发 _canReady.gametype = _gametype; _canReady.palyerlist = oUserlist; _canReady.MatchCode = _tableMathCode + ""; _canReady.maxCount = _tableMaxCount; imList.Add(new UserIDMSG(tempUser._userid, JsonUtils.Serialize(_canReady), tempUser._isRobot, tempUser._isDisconnet)); }); _bsDataServer.SendDataDelay(imList); _tableEnterSendData.Add(imList); }
/// <summary> /// 获取断线前的所有进入人的消息列表 /// </summary> /// <param name="userid"></param> public string GetEnterDisListBase(int pos) { List <OtherUserInfoSD> oUserlist = new List <OtherUserInfoSD>(); ForeashAllDoBase((i) => { oUserlist.Add(_pos2userbase[i]._tbwechatposData); }); sc_entertable_n _canReady = new sc_entertable_n() { fn = "sc_entertable_n", result = 1, _msgid = 8 }; _canReady.pos = pos; _canReady.tableid = _tableid; _canReady.gameid = _gameid;//客服端好做分发 _canReady.gametype = _gametype; _canReady.palyerlist = oUserlist; _canReady.MatchCode = _tableMathCode + ""; _canReady.maxCount = _tableMaxCount; return(JsonUtils.Serialize(_canReady)); }
/// <summary> /// 摹仿客户端 消息处理 不加锁 /// </summary> /// <param name="UserID"></param> /// <param name="strMSG"></param> private static void RobotDealMSG(int UserID, string strMSG) { if (!DicIDtoUser.ContainsKey(UserID)) { //同在BUG容易出现机器先清空了,没有收到结算的方法 需要延时处理 -------------================================== 什么器结算退出后需要休息一定的时间 // ErrorRecord.Record(" 201206062215TC "); return; } sc_base _csdata = JsonUtils.Deserialize <sc_base>(strMSG); if (_csdata == null) { ErrorRecord.Record(" 201206062216TC "); return; } if (_csdata.fn == "") { ErrorRecord.Record(" 201206071117TC 没找到 _csdata.fn"); return; } switch (_csdata.fn) { case "sc_entertable_n": //自动 准备 sc_entertable_n _entertable = JsonUtils.Deserialize <sc_entertable_n>(strMSG); Thread.Sleep(100); TCUser myuentertable; DicIDtoUser.TryGetValue(UserID, out myuentertable); TCTable myt001 = TCLobby.instance.GetTableByRoomIDandTableID(myuentertable._roomid, myuentertable._tableID); if (myt001 != null) { myt001.GetReady(myuentertable._userid); // } break; case "sc_ready_tc_n": break; case "sc_entertable_tc_n": //默认就是准备状态不处理的其他 break; case "sc_tablestart_tc_n": break; case "sc_token_tc_n": //判断是不是自己的token AI只弃牌,如果有两个以前的机器人一直下注会卡,,, sc_token_tc_n _tabletoken = JsonUtils.Deserialize <sc_token_tc_n>(strMSG); Thread.Sleep(100); TCUser _myUserGiveUp; DicIDtoUser.TryGetValue(UserID, out _myUserGiveUp); if (_myUserGiveUp._Pos == _tabletoken.pos) { TCTable _myt_token = TCLobby.instance.GetTableByRoomIDandTableID(_myUserGiveUp._roomid, _myUserGiveUp._tableID); //if (_myt_token != null) _myt_token.GiveUp(_myUserGiveUp._userid); //弃牌 if (_myt_token != null) { _myt_token.Gamble(_myUserGiveUp._userid, 0); } } break; case "sc_showcard_tc_n": break; case "sc_gamble_tc_n": break; case "sc_compare_tc_n": break; case "sc_giveup_tc_n": break; case "sc_end_tc_n": break; case "sc_exittable_n": ////sc_exittable_n _exittable = JsonUtils.Deserialize<sc_exittable_n>(strMSG); ////Thread.Sleep(10); ////TCUser myu_exit; ////DicIDtoUser.TryGetValue(UserID, out myu_exit); ////if (_exittable. != myu_exit._Pos) ////{ //自己的退出消息不再处理 //// TCTable mytexit = TCLobby.GetTableByRoomIDandTableID(myu_exit._roomid, _exittable.tableid); //// if (mytexit != null) mytexit.ExitTable(myu_exit._userid); // ////} break; case "020": //此桌结束了,正常结束 break; default: ErrorRecord.Record("201206190957 strSID:" + _csdata.fn); break; } }
/// <summary> /// 摹仿客户端 消息处理 不加锁 /// </summary> /// <param name="UserID"></param> /// <param name="strMSG"></param> private static void RobotDealMSG(int UserID, string strMSG) { UserStatus _us = BaseLobby.instanceBase.GetUserStatusbyUserID(UserID); if (_us == null) { ErrorRecord.Record(" 201611301728BF " + UserID); return; } if (_us.Status == UserStatusEnum.InLobby) { return; //一局结算了,收到的消息需要处理,也处理不了,Table已释放 } BullColorUser myu = BullColorLobby.instance.GetUserByRoomIDandTableIDandUserID(_us.RoomID, _us.TableID, UserID); if (myu == null) { ErrorRecord.Record(" 201611301729BF " + UserID + ",_us.Status:" + _us.Status + " strMSG:" + strMSG); return; } sc_base _csdata = JsonUtils.Deserialize <sc_base>(strMSG); if (_csdata == null) { ErrorRecord.Record(" 201206062216BF " + UserID); return; } int _waittime3000 = 4000; switch (_csdata.fn) { case "sc_entertable_n": //自动 准备 //Thread.Sleep(900); sc_entertable_n _entertable = JsonUtils.Deserialize <sc_entertable_n>(strMSG); BullColorTable myt001 = BullColorLobby.instance.GetTableByRoomIDandTableID(myu._roomid, myu._tableID); if (myt001 != null && myu._Pos == _entertable.pos) { //// myt001.GetReady(myu._userid); // 自己的进房间通知才准备 } break; case "sc_ready_bf_n": // break; case "sc_tablestart_bf_n": int _waittimeStart = ToolsEx.GetRandomSys(600, 3000); Thread.Sleep(_waittimeStart); sc_tablestart_bfc_n _tablestart = JsonUtils.Deserialize <sc_tablestart_bfc_n>(strMSG); BullColorTable myt = BullColorLobby.instance.GetTableByRoomIDandTableID(myu._roomid, myu._tableID); //根据需求判断 是否抢庄 if (myt != null && !_tablestart.closefun && _tablestart._canGetBanker) { } break; case "sc_gambleone_bfc_n": break; case "sc_setbulltype_bfc_n": //无AI处理 直接等待摊牌 break; case "sc_showone_bfc_n": break; case "sc_showdown_bfc_n": //Thread.Sleep(410); break; case "sc_end_bfc_n": break; case "sc_applyexittable_n": //AI 都同意所有游戏解散 Thread.Sleep(550); sc_applyexittable_n _applyExit = JsonUtils.Deserialize <sc_applyexittable_n>(strMSG); BullColorTable _applyexitTable = BullColorLobby.instance.GetTableByRoomIDandTableID(myu._roomid, myu._tableID); if (_applyexitTable != null) { lock (_applyexitTable) { _applyexitTable.DealExitTable(myu._userid, true); } } break; case "sc_dealexittable_n": break; case "sc_one_exittable_n": break; case "sc_exittable_n": //AI 在有人退出的情况下,全都退出 ////sc_exittable _exittable = JsonUtils.Deserialize<sc_exittable>(strMSG); ////Thread.Sleep(10); ////BullFightUser myu_exit; ////DicIDtoUser.TryGetValue(UserID, out myu_exit); ////if (_exittable.pos != myu_exit._Pos) ////{ //自己的退出消息不再处理 但是只能处理一次 //// ////BullColorTable mytexit = BullColorLobby.GetTableByRoomIDandTableID(myu_exit._roomid, _exittable.tableid); //// ////if (mytexit != null) mytexit.ExitTable(myu_exit._userid); // ////} break; case "sc_chat_n": break; case "sc_disconnect_n": break; case "sc_warning_n": break; case "020": //此桌结束了,正常结束 break; default: ErrorRecord.Record("201206190957BF AI 未处理,strSID:" + _csdata.fn); break; } }