Example #1
0
 /// <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);
     }
 }
Example #2
0
 public TCJudge(TCTable myTable)
 {
     lock (obj)
     {
         _myTable             = myTable;
         DicPosToType         = new ConcurrentDictionary <int, int>();
         MingGangDicPosToType = new ConcurrentDictionary <int, int>();
     }
 }
Example #3
0
        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);
        }
Example #4
0
 /// <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);
     }
 }
Example #5
0
 /// <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));
        }
Example #10
0
        /// <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;
            }
        }
Example #11
0
        /// <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;
            }
        }