Example #1
0
    void SendQueYiMenMessage(GameInfo.QueType queType)
    {
        //发送缺一门消息给服务器
        //var qym = SendQYM.CreateBuilder().SetType((int)queType).SetOpenid(GameInfo.OpenID).Build();
        //byte[] body = qym.ToByteArray();
        var qym = new SendQYM();

        qym.type   = (int)queType;
        qym.openid = GameInfo.OpenID;
        byte[] body = ProtobufUtility.GetByteFromProtoBuf(qym);
        byte[] data = CreateHead.CreateMessage(CreateHead.CSXYNUM + 5011, body.Length, 0, body);
        GameInfo.cs.Send(data);
    }
Example #2
0
        public void CallBack(object state)
        {
            var roomInfo = Gongyong.roomlist.Find(w => w.RoomID == roomID);

            if (roomInfo == null)
            {
                return;
            }
            var muInfo = Gongyong.mulist.Find(w => w.Openid.Equals(openID));

            if (muInfo == null)
            {
                return;
            }

            //lock (ThreadUtility.myObject)
            //{ }
            if (roomInfo.QuickCard)//只有快速出牌才会有10秒出牌roomInfo.DQHY== mulist.ZS_Fw
            {
                var info     = new ProtobufRequestInfo();
                var userInfo = Gongyong.userlist.Find(w => w.openid.Equals(muInfo.Openid));
                if (currentOperation.IndexOf("30071") >= 0 && muInfo.Is_tiantX == -1)//天听
                {
                    userInfo.session.Logger.Debug("10秒后自动30071:" + userInfo.openid);
                    info = new ProtobufRequestInfo();
                    // var userInfo = Gongyong.userlist.Find(w => w.openid.Equals(muInfo.Openid));
                    var guo = SendPeng.CreateBuilder()
                              .SetState(2)
                              .SetOpenid(userInfo.openid)
                              .SetRoomid(roomID)
                              .SetTypes(4);
                    info = new ProtobufRequestInfo();

                    guo.SetFW(roomInfo.DQHY);
                    info.Body          = guo.Build().ToByteArray();
                    info.Key           = "14001";
                    info.Messagelength = info.Body.Length;
                    info.MessageNum    = 14001;
                    info.MessageResNum = 0;
                    new Gang().ExecuteCommand(userInfo.session, info);
                }
                else if (currentOperation.IndexOf("3002") >= 0 && muInfo.QYM == 0)
                {
                    userInfo.session.Logger.Debug("10秒后自动3002:" + userInfo.openid);
                    //foreach (var item in Gongyong.mulist.FindAll(w =>w.RoomID==roomID&& w.QYM == 0))
                    //{  }
                    info     = new ProtobufRequestInfo();
                    userInfo = Gongyong.userlist.Find(w => w.openid.Equals(muInfo.Openid));
                    var qym    = muInfo.majiangs.Select(w => new { Tong = (w.PaiHs < 10 ? 1 : 0), Tiao = (w.PaiHs > 10 && w.PaiHs < 20 ? 1 : 0), Wan = (w.PaiHs > 20 ? 1 : 0) });//遍历所有花色
                    var mydata = from r in qym
                                 group r by new { r.Tiao, r.Tong, r.Wan } into g
                        select new { key = g.Key, number = g.Count() };           //统计花色
                    var key = mydata.OrderBy(w => w.number).FirstOrDefault().key; //取出最少的花色
                    info.Body          = SendQYM.CreateBuilder().SetType(key.Tiao == 1 ? 2 : (key.Tong == 1 ? 1 : 3)).SetOpenid(muInfo.Openid).Build().ToByteArray();
                    info.Key           = "15011";
                    info.Messagelength = info.Body.Length;
                    info.MessageNum    = 14001;
                    info.MessageResNum = 0;
                    new QYM().ExecuteCommand(userInfo.session, info);
                }
                else if (roomInfo.DQHY == muInfo.ZS_Fw)
                {
                    // var muInfo = Gongyong.mulist.Find(w => w.ZS_Fw == roomInfo.DQHY && w.RoomID == roomID);

                    info = new ProtobufRequestInfo();
                    if (currentOperation.Equals("30083"))
                    {
                        if (muInfo.ByteData == "13002")//因为摸牌逻辑比较多处理时间长,
                        {
                            return;
                        }
                        if (userInfo != null)
                        {
                            var mp   = SendMP.CreateBuilder().SetMType(0).SetOpenid(muInfo.Openid).SetRoomid(roomID).Build();
                            var data = mp.ToByteArray();
                            info.Body          = data;
                            info.Key           = "13002";
                            info.Messagelength = data.Length;
                            info.MessageNum    = 13002;
                            info.MessageResNum = 0;
                            new MoPai().ExecuteCommand(userInfo.session, info);
                            userInfo.session.Logger.Debug("10秒后自动摸牌" + mp);
                        }
                    }

                    if (currentOperation.IndexOf("30082") >= 0)//杠牌
                    {
                        userInfo.session.Logger.Debug("10秒后自动30082:" + userInfo.openid);
                        var guo = SendPeng.CreateBuilder()
                                  .SetState(2)
                                  .SetMj(MaJiang.CreateBuilder()
                                         .SetPaiHS(roomInfo.PaiHSCZ.PaiHs)
                                         .SetPaiID(roomInfo.PaiHSCZ.PaiId))
                                  .SetOpenid(userInfo.openid)
                                  .SetRoomid(roomID)
                                  .SetTypes(2);
                        info = new ProtobufRequestInfo();
                        var dqcz = currentOperation.Split(',');
                        switch (dqcz[1])
                        {
                        case "1":
                            guo.SetFW(int.Parse(dqcz[2])).SetGtype("M");
                            break;

                        case "2":
                            guo.SetFW(roomInfo.DQHY).SetGtype("Z");
                            break;

                        case "3":
                            guo.SetFW(roomInfo.DQHY).SetGtype("A");
                            break;

                        case "4":
                            guo.SetFW(roomInfo.DQHY).SetGtype("h");
                            break;
                        }
                        info.Body          = guo.Build().ToByteArray();
                        info.Key           = "14001";
                        info.Messagelength = info.Body.Length;
                        info.MessageNum    = 14001;
                        info.MessageResNum = 0;
                        new Gang().ExecuteCommand(userInfo.session, info);
                    }
                    else if (currentOperation.IndexOf("30081") >= 0)//碰
                    {
                        userInfo.session.Logger.Debug("10秒后自动30081:" + userInfo.openid);
                        var guo = SendPeng.CreateBuilder()
                                  .SetState(2)
                                  .SetMj(MaJiang.CreateBuilder()
                                         .SetPaiHS(roomInfo.PaiHSCZ.PaiHs)
                                         .SetPaiID(roomInfo.PaiHSCZ.PaiId))
                                  .SetOpenid(userInfo.openid)
                                  .SetRoomid(roomID)
                                  .SetTypes(1);
                        info = new ProtobufRequestInfo();
                        var dqcz = currentOperation.Split(',');
                        guo.SetFW(int.Parse(dqcz[1]));
                        info.Body          = guo.Build().ToByteArray();
                        info.Key           = "14001";
                        info.Messagelength = info.Body.Length;
                        info.MessageNum    = 14001;
                        info.MessageResNum = 0;
                        new Gang().ExecuteCommand(userInfo.session, info);
                    }

                    else if (currentOperation.IndexOf("30070") >= 0)//天胡
                    {
                        userInfo.session.Logger.Debug("10秒后自动30070:" + userInfo.openid);
                        var guo = SendPeng.CreateBuilder()
                                  .SetState(2)
                                  .SetOpenid(userInfo.openid)
                                  .SetRoomid(roomID)
                                  .SetTypes(5);
                        info = new ProtobufRequestInfo();
                        var dqcz = currentOperation.Split(',');
                        guo.SetFW(roomInfo.DQHY);
                        info.Body          = guo.Build().ToByteArray();
                        info.Key           = "14001";
                        info.Messagelength = info.Body.Length;
                        info.MessageNum    = 14001;
                        info.MessageResNum = 0;
                        new Gang().ExecuteCommand(userInfo.session, info);
                    }
                    else if (currentOperation.IndexOf("30080") >= 0)//胡
                    {
                        userInfo.session.Logger.Debug("30080:" + userInfo.openid);
                        var guo = SendPeng.CreateBuilder()
                                  .SetState(2)
                                  .SetOpenid(userInfo.openid)
                                  .SetRoomid(roomID)
                                  .SetTypes(3).SetMj(MaJiang.CreateBuilder()
                                                     .SetPaiHS(roomInfo.PaiHSCZ.PaiHs)
                                                     .SetPaiID(roomInfo.PaiHSCZ.PaiId));
                        info = new ProtobufRequestInfo();
                        // var dqcz = currentOperation.Split(',');
                        guo.SetFW(roomInfo.DQHY);
                        info.Body          = guo.Build().ToByteArray();
                        info.Key           = "14001";
                        info.Messagelength = info.Body.Length;
                        info.MessageNum    = 14001;
                        info.MessageResNum = 0;
                        new Gang().ExecuteCommand(userInfo.session, info);
                    }
                    else if (currentOperation.IndexOf("3001") >= 0)//出牌
                    {
                        userInfo.session.Logger.Debug("10秒后自动3001:" + userInfo.openid);
                        var chu = SendCP.CreateBuilder()
                                  .SetRoomid(roomID)
                                  .SetOpenid(userInfo.openid)
                                  .SetType(0);
                        switch (muInfo.QYM)
                        {
                        case 1:
                            if (muInfo.majiangs.Any(u => u.PaiHs < 10))
                            {
                                var mj = muInfo.majiangs.Find(u => u.PaiHs < 10);
                                chu.SetMj(MaJiang.CreateBuilder()
                                          .SetPaiHS(mj.PaiHs)
                                          .SetPaiID(mj.PaiId));
                            }
                            else
                            {
                                chu.SetMj(MaJiang.CreateBuilder()
                                          .SetPaiHS(muInfo.majiangs.Last().PaiHs)
                                          .SetPaiID(muInfo.majiangs.Last().PaiId));
                            }
                            break;

                        case 2:
                            if (muInfo.majiangs.Any(u => u.PaiHs > 10 && u.PaiHs < 20))
                            {
                                var mj = muInfo.majiangs.Find(u => u.PaiHs > 10 && u.PaiHs < 20);
                                chu.SetMj(MaJiang.CreateBuilder()
                                          .SetPaiHS(mj.PaiHs)
                                          .SetPaiID(mj.PaiId));
                            }
                            else
                            {
                                chu.SetMj(MaJiang.CreateBuilder()
                                          .SetPaiHS(muInfo.majiangs.Last().PaiHs)
                                          .SetPaiID(muInfo.majiangs.Last().PaiId));
                            }
                            break;

                        case 3:
                            if (muInfo.majiangs.Any(u => u.PaiHs > 20))
                            {
                                var mj = muInfo.majiangs.Find(u => u.PaiHs > 20);
                                chu.SetMj(MaJiang.CreateBuilder()
                                          .SetPaiHS(mj.PaiHs)
                                          .SetPaiID(mj.PaiId));
                            }
                            else
                            {
                                chu.SetMj(MaJiang.CreateBuilder()
                                          .SetPaiHS(muInfo.majiangs.Last().PaiHs)
                                          .SetPaiID(muInfo.majiangs.Last().PaiId));
                            }
                            break;

                        default:
                            chu.SetMj(MaJiang.CreateBuilder()
                                      .SetPaiHS(muInfo.majiangs.Last().PaiHs)
                                      .SetPaiID(muInfo.majiangs.Last().PaiId));
                            break;
                        }

                        info               = new ProtobufRequestInfo();
                        info.Body          = chu.Build().ToByteArray();
                        info.Key           = "13001";
                        info.Messagelength = info.Body.Length;
                        info.MessageNum    = 14001;
                        info.MessageResNum = 0;
                        new ChuPai().ExecuteCommand(userInfo.session, info);
                    }

                    //if (roomInfo.DQHY == muInfo.ZS_Fw)
                    //    this.CallBack(null);
                    if (userInfo.session != null && userInfo.session.Connected)//发送托管请求
                    {
                        var data = ReturnManaged.CreateBuilder().SetState(1).Build().ToByteArray();
                        userInfo.session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 2011, data.Length, 0, data)));
                    }
                }
            }
            //  GC.Collect();
            // MyTimer.Dispose();
            // this.Dispose();
        }
Example #3
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);
                }
            }
        }