示例#1
0
        public void ExecuteCommand(GameSession session, ProtobufRequestInfo requestInfo)
        {
            if (!Gongyong.userlist.Any(w => w.session.SessionID.Equals(session.SessionID)))
            {
                session.Logger.Debug("QYM : 非法连接");
                session.Close();
                return;
            }
            ///获取缺一门数据
            var getdata = SendQYM.ParseFrom(requestInfo.Body);
            ///根据openid找到用户
            mjuser userrun = Gongyong.mulist.Find(u => u.Openid == getdata.Openid);

            if (userrun == null)
            {
                return;
            }

            if (userrun.ByteData == requestInfo.Key)
            {
                return;
            }
            else
            {
                userrun.ByteData = requestInfo.Key;
            }

            ///如果用户为空则直接返回
            if (userrun == null)
            {
                return;
            }

            if (userrun.QYM != 0 && !string.IsNullOrEmpty(userrun.QYM.ToString()))
            {
                return;
            }
            ///设置用户缺的麻将
            userrun.QYM = getdata.Type;
            ///根据房间ID找到当前房间
            List <mjuser> userlist = Gongyong.mulist.FindAll(u => u.RoomID == userrun.RoomID);
            mjuser        mjlist   = Gongyong.mulist.Find(u => u.RoomID == userrun.RoomID && (u.QYM == 0 || string.IsNullOrEmpty(u.QYM.ToString())));

            CardUser cu = Gongyong.FKUser.Find(u => u.roomid == userrun.RoomID);

            if (mjlist == null)
            {
                ThreadUtility.RemoveManagedThread(getdata.Openid);//当用户操作时 取消用户的倒计时
                var  returndata    = ReturnAYM.CreateBuilder();
                var  mjuserAll     = Gongyong.mulist.FindAll(u => u.RoomID == userrun.RoomID);
                var  R             = Gongyong.roomlist.Find(u => u.RoomID == userrun.RoomID);
                Ting t             = new Ting();
                var  ReturnGangMSG = ReturnGang.CreateBuilder();
                foreach (var item in mjuserAll)
                {
                    item.SendData.Clear();
                    ReturnTTATH.Builder sendmj = ReturnTTATH.CreateBuilder();
                    UserInfo            user   = Gongyong.userlist.Find(u => u.openid == item.Openid);
                    //sendmj.AddMj(MaJiang.CreateBuilder());
                    List <model.ServerMaJiang> listT = new List <model.ServerMaJiang>();
                    listT.AddRange(item.majiangs.ToArray());
                    var Ruturnjsmj = new List <model.ServerMaJiang>();

                    string hxx = t.GetTing(listT);
                    if (hxx != "MJ")
                    {
                        if (cu.win == item.ZS_Fw)
                        {
                            if (hxx == "H")
                            {
                                switch (item.QYM)
                                {
                                case 1:
                                    if (item.majiangs.FindAll(u => u.PaiHs < 10).Count <= 0)
                                    {
                                        sendmj.SetState(214);
                                        item.Is_tianHu = true;
                                    }
                                    break;

                                case 2:
                                    if (item.majiangs.FindAll(u => u.PaiHs > 10 && u.PaiHs < 20).Count <= 0)
                                    {
                                        sendmj.SetState(214);
                                        item.Is_tianHu = true;
                                    }
                                    break;

                                case 3:
                                    if (item.majiangs.FindAll(u => u.PaiHs > 20).Count <= 0)
                                    {
                                        sendmj.SetState(214);
                                        item.Is_tianHu = true;
                                    }
                                    break;

                                default:
                                    break;
                                }
                            }

                            else if (R.room_peo < 4)
                            {
                                switch (item.QYM)
                                {
                                case 1:
                                    if (item.majiangs.FindAll(u => u.PaiHs < 10).Count <= 0)
                                    {
                                        ///庄家报听判断
                                        List <model.ServerMaJiang> JPMJ = new List <model.ServerMaJiang>();
                                        JPMJ.AddRange(item.majiangs.ToArray());

                                        Ruturnjsmj = t.ReturnJMJ(JPMJ);
                                        //item.Is_tiant = true;
                                    }

                                    break;

                                case 2:
                                    if (item.majiangs.FindAll(u => u.PaiHs > 10 && u.PaiHs < 20).Count <= 0)
                                    {
                                        ///庄家报听判断
                                        List <model.ServerMaJiang> JPMJ = new List <model.ServerMaJiang>();
                                        JPMJ.AddRange(item.majiangs.ToArray());
                                        Ruturnjsmj = t.ReturnJMJ(JPMJ);
                                        //item.Is_tiant = true;
                                    }
                                    break;

                                case 3:
                                    if (item.majiangs.FindAll(u => u.PaiHs > 20).Count <= 0)
                                    {
                                        ///庄家报听判断
                                        List <model.ServerMaJiang> JPMJ = new List <model.ServerMaJiang>();
                                        JPMJ.AddRange(item.majiangs.ToArray());
                                        Ruturnjsmj = t.ReturnJMJ(JPMJ);
                                        //item.Is_tiant = true;
                                    }
                                    break;

                                default:
                                    break;
                                }
                            }
                            else
                            {
                                ///庄家报听判断
                                List <model.ServerMaJiang> JPMJ = new List <model.ServerMaJiang>();
                                JPMJ.AddRange(item.majiangs.ToArray());
                                Ruturnjsmj = t.ReturnJMJ(JPMJ);
                                // item.Is_tiant = true;
                            }
                        }
                        else
                        {
                            if (R.room_peo < 4)
                            {
                                switch (item.QYM)
                                {
                                case 1:
                                    if (item.majiangs.FindAll(u => u.PaiHs < 10).Count <= 0)
                                    {
                                        sendmj.SetState(213);
                                        var           TT         = ReturnTT.CreateBuilder().SetFw(item.ZS_Fw);
                                        byte[]        TTR        = TT.Build().ToByteArray();
                                        List <mjuser> listmjuser = Gongyong.mulist.FindAll(u => u.RoomID == item.RoomID);
                                        //foreach (var mjuser in listmjuser)
                                        //{
                                        //    UserInfo user = Gongyong.userlist.Find(u => u.openid == mjuser.Openid);
                                        //    user.session.TrySend(new ArraySegment<byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 5013, TTR.Length, GameInformationBase.BASEAGREEMENTNUMBER + 7093, TTR)));
                                        //}
                                        item.Is_tiant  = true;
                                        R.DQHY         = item.ZS_Fw;
                                        R.DQcz         = "30071";
                                        item.Is_tiantX = -1;
                                    }
                                    break;

                                case 2:
                                    if (item.majiangs.FindAll(u => u.PaiHs > 10 && u.PaiHs < 20).Count <= 0)
                                    {
                                        sendmj.SetState(213);
                                        var           TT         = ReturnTT.CreateBuilder().SetFw(item.ZS_Fw);
                                        byte[]        TTR        = TT.Build().ToByteArray();
                                        List <mjuser> listmjuser = Gongyong.mulist.FindAll(u => u.RoomID == item.RoomID);
                                        R.DQHY         = item.ZS_Fw;
                                        R.DQcz         = "30071";
                                        item.Is_tiant  = true;
                                        item.Is_tiantX = -1;
                                    }
                                    break;

                                case 3:
                                    if (item.majiangs.FindAll(u => u.PaiHs > 20).Count <= 0)
                                    {
                                        sendmj.SetState(213);
                                        var           TT         = ReturnTT.CreateBuilder().SetFw(item.ZS_Fw);
                                        byte[]        TTR        = TT.Build().ToByteArray();
                                        List <mjuser> listmjuser = Gongyong.mulist.FindAll(u => u.RoomID == item.RoomID);

                                        item.Is_tiant  = true;
                                        R.DQHY         = item.ZS_Fw;
                                        R.DQcz         = "30071";
                                        item.Is_tiantX = -1;
                                    }
                                    break;

                                default:
                                    break;
                                }
                            }
                            else
                            {
                                sendmj.SetState(213);
                                var           TT         = ReturnTT.CreateBuilder().SetFw(item.ZS_Fw);
                                byte[]        TTR        = TT.Build().ToByteArray();
                                List <mjuser> listmjuser = Gongyong.mulist.FindAll(u => u.RoomID == item.RoomID);
                                item.Is_tiant  = true;
                                item.Is_tiantX = -1;
                                R.DQHY         = item.ZS_Fw;
                                R.DQcz         = "30071";
                            }
                        }
                    }
                    if (Ruturnjsmj.Count > 0)
                    {
                        var returntp = ReturnTP.CreateBuilder();
                        var tmj      = MaJiang.CreateBuilder();
                        foreach (var mjItem in Ruturnjsmj)
                        {
                            tmj.SetPaiHS(mjItem.PaiHs);
                            tmj.SetPaiID(mjItem.PaiId);
                            returntp.AddMj(tmj);
                        }
                        byte[] tmjsr = returntp.Build().ToByteArray();
                        var    data  = new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 2009, tmjsr.Length, requestInfo.MessageNum, tmjsr));
                        item.SendData.Add(data);
                        user.session.TrySend(data);
                    }
                    if (sendmj.HasState)
                    {
                        var data      = sendmj.Build().ToByteArray();
                        var dataArray = new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 2010, data.Length, requestInfo.MessageNum, data));
                        item.SendData.Add(dataArray);
                        user.session.TrySend(dataArray);
                    }

                    //验证杠牌
                    if (cu.win == item.ZS_Fw)
                    {
                        // listT.AddRange(item.majiangs.ToArray());

                        var listchuan = listT.GroupBy(w => w.PaiHs).Select(w => new { PaiHs = w.Key, Count = w.Count() });
                        foreach (var gangInfo in listchuan.Where(w => w.Count == 4))
                        {
                            switch (item.QYM)
                            {
                            case 1:
                                if (gangInfo.PaiHs > 10)
                                {
                                    var PGH = ReturnAll.CreateBuilder();
                                    var mjG = MaJiang.CreateBuilder();
                                    mjG.SetPaiHS(gangInfo.PaiHs);
                                    mjG.SetPaiID(401);

                                    ReturnGangMSG.AddGang(GangMSG.CreateBuilder().SetFw(cu.win).SetMj(mjG).SetType(3));
                                }
                                break;

                            case 2:
                                if (gangInfo.PaiHs < 10 && gangInfo.PaiHs > 20)
                                {
                                    var PGH = ReturnAll.CreateBuilder();
                                    var mjG = MaJiang.CreateBuilder();
                                    mjG.SetPaiHS(gangInfo.PaiHs);
                                    mjG.SetPaiID(401);

                                    ReturnGangMSG.AddGang(GangMSG.CreateBuilder().SetFw(cu.win).SetMj(mjG).SetType(3));
                                }
                                break;

                            case 3:
                                if (gangInfo.PaiHs < 20)
                                {
                                    var PGH = ReturnAll.CreateBuilder();
                                    var mjG = MaJiang.CreateBuilder();
                                    mjG.SetPaiHS(gangInfo.PaiHs);
                                    mjG.SetPaiID(401);

                                    ReturnGangMSG.AddGang(GangMSG.CreateBuilder().SetFw(cu.win).SetMj(mjG).SetType(3));
                                }
                                break;

                            default:
                                break;
                            }
                        }


                        if (ReturnGangMSG.GangCount > 0)
                        {
                            byte[] bytegang = ReturnGangMSG.Build().ToByteArray();
                            user.session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 5022, bytegang.Length, requestInfo.MessageNum, bytegang)));
                        }
                    }
                }


                if (userlist.Any(w => w.Is_tianHu))
                {
                    var user = userlist.Find(w => w.Is_tianHu);
                    user.SendData.Clear();
                    var    humj  = user.majiangs.Last();
                    var    hupai = ReturnHByType.CreateBuilder().SetFWZ(user.ZS_Fw).SetMJ(MaJiang.CreateBuilder().SetPaiHS(humj.PaiHs).SetPaiID(humj.PaiId)).SetType(1);
                    byte[] data  = hupai.Build().ToByteArray();
                    if (userlist.Any(w => w.Is_tiant))
                    {
                        RoomMsgWirte msgri = new RoomMsgWirte()
                        {
                            openid    = user.Openid,
                            xiaoxihao = 5015,
                            ArrList   = data,
                            roomid    = user.RoomID
                            ,
                            operating = "30070"
                        };
                        Gongyong.roommsg.Add(msgri);
                    }
                    else
                    {
                        var userSend = Gongyong.userlist.Find(w => w.openid.Equals(user.Openid));

                        var dataArray = new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 5015, data.Length, requestInfo.MessageNum, data));
                        user.SendData.Add(dataArray);
                        userSend.session.TrySend(dataArray);
                        R.DQHY = user.ZS_Fw;
                        R.DQcz = "30070";
                        ThreadUtility.StartManagedThread(user.Openid, R.RoomID, R.DQcz);
                    }
                    // userSendJ.session.TrySend(new ArraySegment<byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 5015, data.Length, requestInfo.MessageNum, data)));
                }
                else if (userlist.Any(w => w.Is_tiant))
                {
                    R.DQHY = 0;
                    R.DQcz = "30071";
                    foreach (var item in userlist)
                    {
                        ThreadUtility.StartManagedThread(item.Openid, R.RoomID, R.DQcz);
                    }
                }
                else
                {
                    byte[] startHY = ReturnHyUser.CreateBuilder().SetCz("3001").SetFw(cu.win).Build().ToByteArray();
                    R.DQHY = cu.win;
                    R.DQcz = "3001";
                    foreach (var item in userlist)
                    {
                        UserInfo user = Gongyong.userlist.Find(u => u.openid == item.Openid);
                        user.IsActive = true;
                        user.session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 7004, startHY.Length, GameInformationBase.BASEAGREEMENTNUMBER + 7093, startHY)));
                    }
                    ThreadUtility.StartManagedThread(userlist.Find(w => w.ZS_Fw == cu.win).Openid, R.RoomID, R.DQcz);
                }
                ///下发缺牌信息
                foreach (var item in userlist)
                {
                    var senddata = ReturnQYM.CreateBuilder().SetFw(item.ZS_Fw).SetType(item.QYM);
                    returndata.AddQP(senddata);
                    //牌局回放 缺一门
                    R.gameOperationProcess.AddGameOperationInfo(
                        GameOperationInfo.CreateBuilder()
                        .SetSerialNumber(R.gameOperationProcess.GameOperationInfoCount)
                        .SetOperationFW(item.ZS_Fw)
                        .SetOperationType(8)
                        .SetQYM(item.QYM)
                        );
                }
                byte[] RBT = returndata.Build().ToByteArray();



                foreach (var item in userlist)
                {
                    UserInfo user = Gongyong.userlist.Find(u => u.openid == item.Openid);
                    var      data = new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 5012, RBT.Length, requestInfo.MessageNum, RBT));
                    item.SendData.Add(data);
                    user.session.TrySend(data);
                }
            }
        }
示例#2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="requestInfo">请求信息</param>
        /// <param name="sendmj">返回开始游戏集合</param>
        /// <param name="ReturnGangMSG">返回杠牌集合信息</param>
        /// <param name="Ruturnjsmj">返回打出叫牌的集合</param>
        /// <param name="session">ss请求</param>
        /// <param name="roomID">房间ID</param>
        /// <param name="mj">当前玩家</param>
        /// <param name="number">请求次数</param>
        /// <param name="openid"></param>
        public void GetMyCards(ProtobufRequestInfo requestInfo, ReturnStartGame.Builder sendmj, ReturnGang.Builder ReturnGangMSG,
                               List <model.ServerMaJiang> Ruturnjsmj, GameSession session, int roomID, mjuser mj, string openid, ref int number)
        {
            ReturnGangMSG = ReturnGang.CreateBuilder();
            Ruturnjsmj    = new List <model.ServerMaJiang>();
            ///房间牌堆
            List <model.ServerMaJiang> listmj = new List <model.ServerMaJiang>();
            CreateMj C = new CreateMj();

            mj.MopaiNumber = 0;

            ///房间牌堆赋值
            Room    R   = new Room();
            Room_JX rjx = new Room_JX();

            rjx = Gongyong.room_JX.Find(u => u.room_id == roomID);
            if (rjx != null)
            {
                rjx.room_peo = 0;
            }

            R = Gongyong.roomlist.Find(u => u.RoomID == roomID);
            R.MPS++;

            if (Gongyong.roomlist.Find(u => u.RoomID == roomID).RoomPai.Count == 0)
            {
                listmj = C.CreateMJ(R.IsYuanQue);
            }
            else
            {
                listmj = R.RoomPai;
            }
#if DEBUG
            /*    listmj.Insert(0, new ServerMaJiang { PaiHs = 2, PaiId = 201 });
             * listmj.Insert(0, new ServerMaJiang { PaiHs = 2, PaiId = 202 });
             * listmj.Insert(0, new ServerMaJiang { PaiHs = 2, PaiId = 203 });
             * listmj.Insert(0, new ServerMaJiang { PaiHs = 2, PaiId = 204 });
             * listmj.Insert(0, new ServerMaJiang { PaiHs = 1, PaiId = 205 });
             * listmj.Insert(0, new ServerMaJiang { PaiHs = 1, PaiId = 206 });
             * listmj.Insert(0, new ServerMaJiang { PaiHs = 1, PaiId = 207 });
             * listmj.Insert(0, new ServerMaJiang { PaiHs = 1, PaiId = 208 });
             * listmj.Insert(0, new ServerMaJiang { PaiHs = 5, PaiId = 209 });
             * listmj.Insert(0, new ServerMaJiang { PaiHs = 5, PaiId = 210 });
             * listmj.Insert(0, new ServerMaJiang { PaiHs = 6, PaiId = 211 });
             * listmj.Insert(0, new ServerMaJiang { PaiHs = 6, PaiId = 212 });
             * listmj.Insert(0, new ServerMaJiang { PaiHs = 7, PaiId = 213 });
             * listmj.Insert(0, new ServerMaJiang { PaiHs = 7, PaiId = 214 });  */
#endif
            R.startgame = 1;
            CardUser cu = Gongyong.FKUser.Find(u => u.roomid == roomID);
            if (cu == null)
            {
                cu            = new CardUser();
                cu.roomid     = roomID;
                cu.win        = 1;
                cu.dong       = 0;
                cu.xi         = 0;
                cu.nan        = 0;
                cu.bei        = 0;
                cu.jushu      = 0;
                cu.dongM      = 0;
                cu.xiM        = 0;
                cu.nan        = 0;
                cu.beiM       = 0;
                cu.lianzCount = 1;
                Gongyong.FKUser.Add(cu);
            }
            else
            {
                cu.dongM = 0;
                cu.xiM   = 0;

                cu.beiM = 0;
            }

            //  int x = 0;
            int y = 0;

            #region 根据玩家方位判断玩家手牌

            string logs = "";
            for (int i = 0; i < listmj.Count; i++)
            {
                logs += listmj[i].PaiHs + ",";
            }

            session.Logger.Debug("牌堆" + logs);

            //int x = 0;
            //int y = 0;

            if (mj.ZS_Fw == cu.win)
            {
                //  x = 0;
                y = 14;
            }
            else
            {
                // x = 0;
                y = 13;
            }
            #endregion


            ///组装下发数据
            foreach (var item in listmj.Take(y))
            {
                MaJiang fanmj = MaJiang.CreateBuilder().SetPaiHS(item.PaiHs).SetPaiID(item.PaiId).Build();
                mj.majiangs.Add(item);
                int count = mj.majiangs.Count;
                sendmj.AddMj(fanmj);
            }

            // number += y;
            listmj.RemoveRange(0, y);
            R.RoomPai = listmj;
            mj.majiangs.Sort((a, b) => - b.PaiHs.CompareTo(a.PaiHs));
            Gongyong.mulist.Add(mj);
            Ting t = new Ting();
            List <model.ServerMaJiang> listT = new List <model.ServerMaJiang>();
            listT.AddRange(mj.majiangs.ToArray());

            UserInfo userSendJ = Gongyong.userlist.Find(u => u.openid == openid);
            int      PaiHS     = 0;
            if (R.room_peo == 4 || R.IsYuanQue)
            {
                if (cu.win == mj.ZS_Fw)
                {
                    foreach (var item in listT)
                    {
                        List <model.ServerMaJiang> listchuan = listT.FindAll(u => u.PaiHs == item.PaiHs);
                        if (listchuan.Count == 4)
                        {
                            if (PaiHS != item.PaiHs)
                            {
                                var PGH = ReturnAll.CreateBuilder();
                                var mjG = MaJiang.CreateBuilder();
                                mjG.SetPaiHS(item.PaiHs);
                                mjG.SetPaiID(item.PaiId);

                                ReturnGangMSG.AddGang(GangMSG.CreateBuilder().SetFw(cu.win).SetMj(mjG).SetType(3));
                            }
                            PaiHS = item.PaiHs;
                        }
                    }


                    if (ReturnGangMSG.GangCount > 0)
                    {
                        byte[] bytegang = ReturnGangMSG.Build().ToByteArray();
                        userSendJ.session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 5022, bytegang.Length, requestInfo.MessageNum, bytegang)));
                    }
                }
            }
            var ttAthState = ReturnTTATH.CreateBuilder();

            if (cu.win == mj.ZS_Fw)
            {
                if (t.GetTing(listT) == "H")
                {
                    if (R.room_peo < 4)
                    {
                        switch (mj.QYM)
                        {
                        case 1:
                            if (mj.majiangs.FindAll(u => u.PaiHs < 10).Count <= 0)
                            {
                                // mj.Is_tiantX = -1;
                                ttAthState.SetState(214);
                                mj.Is_tianHu = true;
                            }
                            break;

                        case 2:
                            if (mj.majiangs.FindAll(u => u.PaiHs > 10 && u.PaiHs < 20).Count <= 0)
                            {
                                // mj.Is_tiantX = -1;
                                ttAthState.SetState(214);
                                mj.Is_tianHu = true;
                            }
                            break;

                        case 3:
                            if (mj.majiangs.FindAll(u => u.PaiHs > 20).Count <= 0)
                            {
                                //mj.Is_tiantX = -1;
                                ttAthState.SetState(214);
                                mj.Is_tianHu = true;
                            }
                            break;

                        default:
                            break;
                        }
                    }
                    else
                    {
                        ttAthState.SetState(214);
                        // mj.Is_tiantX = -1;
                        mj.Is_tianHu = true;
                    }
                }
                else
                {
                    if (R.room_peo < 4)
                    {
                        switch (mj.QYM)
                        {
                        case 1:
                            if (mj.majiangs.FindAll(u => u.PaiHs < 10).Count <= 0)
                            {
                                ///庄家报听判断
                                List <model.ServerMaJiang> JPMJ = new List <model.ServerMaJiang>();
                                JPMJ.AddRange(mj.majiangs.ToArray());

                                Ruturnjsmj = t.ReturnJMJ(JPMJ);
                            }

                            break;

                        case 2:
                            if (mj.majiangs.FindAll(u => u.PaiHs > 10 && u.PaiHs < 20).Count <= 0)
                            {
                                ///庄家报听判断
                                List <model.ServerMaJiang> JPMJ = new List <model.ServerMaJiang>();
                                JPMJ.AddRange(mj.majiangs.ToArray());
                                Ruturnjsmj = t.ReturnJMJ(JPMJ);
                            }
                            break;

                        case 3:
                            if (mj.majiangs.FindAll(u => u.PaiHs > 20).Count <= 0)
                            {
                                ///庄家报听判断
                                List <model.ServerMaJiang> JPMJ = new List <model.ServerMaJiang>();
                                JPMJ.AddRange(mj.majiangs.ToArray());
                                Ruturnjsmj = t.ReturnJMJ(JPMJ);
                            }
                            break;

                        default:
                            break;
                        }
                    }
                    else
                    {
                        ///庄家报听判断
                        List <model.ServerMaJiang> JPMJ = new List <model.ServerMaJiang>();
                        JPMJ.AddRange(mj.majiangs.ToArray());
                        Ruturnjsmj = t.ReturnJMJ(JPMJ);
                    }
                }
            }
            else
            {    ///判断天听
                if (t.GetTing(listT) != "MJ")
                {
                    if (R.room_peo < 4)
                    {
                        switch (mj.QYM)
                        {
                        case 1:
                            if (mj.majiangs.FindAll(u => u.PaiHs < 10).Count <= 0)
                            {
                                ttAthState.SetState(213);

                                mj.Is_tiantX = -1;
                                mj.Is_tiant  = true;
                            }
                            break;

                        case 2:
                            if (mj.majiangs.FindAll(u => u.PaiHs > 10 && u.PaiHs < 20).Count <= 0)
                            {
                                ttAthState.SetState(213);


                                mj.Is_tiantX = -1;
                                mj.Is_tiant  = true;
                            }
                            break;

                        case 3:
                            if (mj.majiangs.FindAll(u => u.PaiHs > 20).Count <= 0)
                            {
                                ttAthState.SetState(213);

                                mj.Is_tiantX = -1;
                                mj.Is_tiant  = true;
                            }
                            break;

                        default:
                            break;
                        }
                    }
                    else
                    {
                        ttAthState.SetState(213);

                        mj.Is_tiantX = -1;
                        mj.Is_tiant  = true;
                    }
                }
            }

            if (Ruturnjsmj.Count > 0)
            {
                var returntp = ReturnTP.CreateBuilder();
                var tmj      = MaJiang.CreateBuilder();
                foreach (var mjItem in Ruturnjsmj)
                {
                    tmj.SetPaiHS(mjItem.PaiHs);
                    tmj.SetPaiID(mjItem.PaiId);
                    returntp.AddMj(tmj);
                }
                byte[] tmjsr = returntp.Build().ToByteArray();
                userSendJ.session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 2009, tmjsr.Length, requestInfo.MessageNum, tmjsr)));
            }
            sendmj.SetChuuser(cu.win);
            sendmj.SetGamenumber(number);

            //牌局回放 发牌
            R.gameOperationProcess.AddGameOperationInfo(GameOperationInfo.CreateBuilder()
                                                        .SetOperationFW(mj.ZS_Fw)
                                                        .AddRangeMJ(sendmj.MjList)
                                                        .SetSerialNumber(R.gameOperationProcess.GameOperationInfoCount)
                                                        .SetOperationType(0)
                                                        .SetChuUser(cu.win)
                                                        );
            byte[] sendbyte = sendmj.Build().ToByteArray();
            userSendJ.session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 2006, sendbyte.Length, requestInfo.MessageNum, sendbyte)));

            if (ttAthState.HasState)
            {
                byte[] sendbytes = ttAthState.Build().ToByteArray();
                userSendJ.session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 2010, sendbytes.Length, requestInfo.MessageNum, sendbytes)));
            }
            ///判断房间人数满足 并且没有天听用户才发生活跃用户
            if (R.MPS == R.room_peo)
            {
                List <mjuser> listmjuserstart = Gongyong.mulist.FindAll(u => u.RoomID == mj.RoomID);
                var           userbool        = Gongyong.mulist.FindAll(u => u.RoomID == R.RoomID && u.Is_tiant == true);
                if (userbool.Count == 0 && (R.room_peo == 4 || R.IsYuanQue))//当原缺或者四人桌,没有人天听的时候 为庄家挂上倒计时出牌
                {
                    byte[] startHY = ReturnHyUser.CreateBuilder().SetCz("3001").SetFw(cu.win).Build().ToByteArray();
                    R.DQHY = cu.win;
                    R.DQcz = "3001";
                    foreach (var item in listmjuserstart)
                    {
                        UserInfo user = Gongyong.userlist.Find(u => u.openid == item.Openid);
                        user.IsActive = true;
                        user.session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 7004, startHY.Length, GameInformationBase.BASEAGREEMENTNUMBER + 7093, startHY)));
                    }
                    if (number == 0)
                    {
                        ThreadUtility.StartManagedThread(listmjuserstart.Find(w => w.ZS_Fw == cu.win).Openid, R.RoomID, R.DQcz);
                    }
                }
                else if (userbool.Count > 0)//当有天听时, 为每个天听用户挂上倒计时
                {
                    R.DQHY = 0;
                    R.DQcz = "30071";
                    if (number == 0)
                    {
                        foreach (var item in userbool)
                        {
                            ThreadUtility.StartManagedThread(item.Openid, R.RoomID, R.DQcz);
                        }
                    }
                }
                else//需要选择缺一门时 为每个用户挂上倒计时
                {
                    R.DQHY = 0;
                    R.DQcz = "3002";
                    if (number == 0)
                    {
                        foreach (var item in listmjuserstart)
                        {
                            ThreadUtility.StartManagedThread(item.Openid, R.RoomID, R.DQcz);
                        }
                    }
                }
                foreach (var item in listmjuserstart)
                {
                    UserInfo user         = Gongyong.userlist.Find(u => u.openid == item.Openid);
                    byte[]   returnzhuang = ReturnZhuang.CreateBuilder().SetZhuang(cu.win).SetSeizi(cu.Points).SetZhuangCount(cu.lianzCount).Build().ToByteArray();
                    user.session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 5020, returnzhuang.Length, GameInformationBase.BASEAGREEMENTNUMBER + 7093, returnzhuang)));
                }
                // ThreadUtility.StartManagedThread(R.RoomID.ToString(), R.RoomID);
                StringBuilder mjrz = new StringBuilder();
                //foreach (var item in mj.majiangs)
                //{

                //    mjrz.Append(item.PaiHs + ",");

                //}
                //session.Logger.Debug("方位------" + mj.ZS_Fw + "----" + mjrz);
                number++;
            }
        }