/// <summary> /// 自动分配 3个人 到一桌 1.玩家进入房间触发。2.系统增加机器人触发 /// 分配机器人也在这儿处理 /// </summary> /// <returns></returns> private int AutoAlloctoTable(TCUser tempU, int _tid, cs_enterroom _data) { lock (objLock) { TCTable _bftable; if (DicTable.TryGetValue(_tid, out _bftable)) {//已存在流程是错误的 ErrorRecord.Record("fetal error 201601101429TC 必须处理 "); return(-1); } List <TCUser> _tempfirstUser = new List <TCUser>(); _tempfirstUser.Add(tempU); TCTable tab = new TCTable(_gameid, _roomid, _tid, _tempfirstUser, _data); int _checkCode = tab.CheckRoomCard(tempU._userid); if (_checkCode != 1) { return(_checkCode); } for (int i = 0; i < _tempfirstUser.Count; i++) { //移出已经分配了的用户 TCUser temp02 = null; // new BullFightUser(); DicUser.TryRemove(_tempfirstUser[i]._userid, out temp02); } //添加到当前桌子列表,以便打牌过程好使用 if (!DicTable.TryAdd(_tid, tab)) { ErrorRecord.Record("add _tableid fial maybe have exist... 201208241601TC"); } return(1); } }
public TCJudge(TCTable myTable) { lock (obj) { _myTable = myTable; DicPosToType = new ConcurrentDictionary <int, int>(); MingGangDicPosToType = new ConcurrentDictionary <int, int>(); } }
public bool SendChat(int userid, cs_chat chat) { TCTable _bftable = GetTableByRoomIDandTableID(chat.levelid, chat.tableid); if (_bftable != null) { _bftable.SendChatBase(userid, chat.content, chat.type); return(true); } return(false); }
/// <summary> /// l输入 房间编号进到指定的桌子 1.玩家进入房间触发。 /// </summary> /// <returns></returns> public int EnterRoomTable(TCTable _bftable, tb_User tbUser) { lock (objLock) { base.EnterRoomBase(tbUser.UserID, _gameid); ////BullFightUser tempU = new BullFightUser(); ////tempU.Initi(tbUser.IP, mRoomID, tbUser, false);// 当成客户端 的IP:Port用 ////_bftable.AllocationtoTable(tempU); return(1); } }
/// <summary> /// /// </summary> /// <param name="UserID"></param> /// <returns></returns> public TCUser GetUserByRoomIDandTableIDandUserID(int RoomID, int TableID, int UserID) { lock (obj) { TCTable myT = GetTableByRoomIDandTableID(RoomID, TableID); if (myT == null) { ErrorRecord.Record("21020726151103 运行正常后去掉"); return(null); } return(myT.GetUserByID(UserID)); } }
/// <summary> /// 比牌 /// </summary> /// <returns></returns> public string Compare(tb_User _user, cs_compare_tc _data) { sc_compare_tc _senddata = new sc_compare_tc() { result = 0, fn = "sc_compare_tc", cc = 0 }; TCTable table = TCLobby.instance.GetTableByRoomIDandTableID(_data.levelid, _data.tableid); if (table == null) { return(JsonUtils.Serialize(_senddata)); } table.Compare(_user.UserID, _data.targetpos); _senddata.result = 1; return(JsonUtils.Serialize(_senddata)); }
/// <summary> /// 下注 /// </summary> /// <param name="_user"></param> /// <param name="_data"></param> /// <returns></returns> public string Gamble(tb_User _user, cs_gamble_tc _data) { sc_gamble_tc _senddata = new sc_gamble_tc() { result = 0, fn = "sc_gamble_tc", cc = 0 }; TCTable table = TCLobby.instance.GetTableByRoomIDandTableID(_data.levelid, _data.tableid); if (table == null) { return(JsonUtils.Serialize(_senddata)); } table.Gamble(_user.UserID, _data.money, _data.addrate); _senddata.result = 1; return(JsonUtils.Serialize(_senddata)); }
/// <summary> /// 看牌 /// </summary> /// <param name="_user"></param> /// <param name="_data"></param> /// <returns></returns> public string ShowCard(tb_User _user, cs_showcard_tc _data) { sc_showcard_tc _senddata = new sc_showcard_tc() { result = 0, fn = "sc_showcard_tc", cc = 0 }; TCTable table = TCLobby.instance.GetTableByRoomIDandTableID(_data.levelid, _data.tableid); if (table == null) { return(JsonUtils.Serialize(_senddata)); } _senddata.shoupai = table.ShowCard(_user.UserID); _senddata.result = 1; return(JsonUtils.Serialize(_senddata)); }
/// <summary> /// 进入房间 返回现在等待用户数 /// </summary> /// <returns></returns> private string TableReady(tb_User _user, cs_ready_tc _data) { sc_ready_tc _senddata = new sc_ready_tc() { result = 0, fn = "sc_ready_tc", cc = 0 }; TCTable table = TCLobby.instance.GetTableByRoomIDandTableID(_data.levelid, _data.tableid); if (table == null) { return(JsonUtils.Serialize(_senddata)); } table.GetReady(_user.UserID); _senddata.result = 1; return(JsonUtils.Serialize(_senddata)); }
/// <summary> /// 用户登录房间时调用 /// </summary> /// <param name="roomID"></param> /// <param name="_UserID"></param> /// <param name="ipport"></param> /// <returns></returns> public int EnterRoom(cs_enterroom _data, int UserID, string ipport) { lock (objLock) { base.EnterRoomBase(UserID, _data.gameid); tb_User tbuser = tb_UserEx.GetFromCachebyUserID(UserID); if (tbuser == null) { ErrorRecord.Record("201208241558TC tbuser == null userID:" + UserID); return(0); } UserStatus _us = BaseLobby.instanceBase.GetUserStatusbyUserID(UserID); if (_us != null) { if (_us.Status == UserStatusEnum.InTableDaiPai || _us.Status == UserStatusEnum.InTableDaiPaiDis || _us.Status == UserStatusEnum.InTableWaiting) { return(-1); } } TCUser tempU = new TCUser(); tempU.Initi(ipport, mRoomID, tbuser, false); // 当成客户端 的IP:Port用 if (!DicUser.TryAdd(UserID, tempU)) { ErrorRecord.Record("201208241155TC 已经存在ROOM内了, 添加不成功"); } TCTable _findtable = GetEmptyPosTable(); if (_findtable != null) { ////_findtable.AllocationtoTable(DicUser[UserID]); ////BullFightUser temp02 = null;// new BullFightUser(); ////DicUser.TryRemove(UserID, out temp02); ////return 1;//直接进入 空桌子 //开房模式不要这个功能了, } int _tableid = 0; if (!unusedTableQue.TryDequeue(out _tableid)) { ErrorRecord.Record("201611141831TC unusedQue.Count <= 0 桌子不够了,,只是能等待排队..."); return(999); } return(AutoAlloctoTable(tempU, _tableid, _data)); //return DicUser.Count; } }
/// <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; } }