コード例 #1
0
ファイル: GetRoomCard.cs プロジェクト: zhaoy615/Guizhoule
        public void ExecuteCommand(GameSession session, ProtobufRequestInfo requestInfo)
        {
            var             gameOperation = SendGetRoomCard.ParseFrom(requestInfo.Body);
            RedisLoginModel olduser       = RedisUtility.Get <RedisLoginModel>(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERLIST, gameOperation.Openid, gameOperation.Unionid));

            if (olduser == null)
            {
                return;
            }
            var info = Gongyong.userlist.First(w => w.openid.Equals(olduser.Openid));

            if (info == null)
            {
                return;
            }
            if (info.Type == 0)
            {
                var msg = ReturnGetRoomCard.CreateBuilder().SetUserRoomCard(RoomCardUtility.GetRoomCard(gameOperation.UserID)).Build().ToByteArray();
                session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1023, msg.Length, requestInfo.MessageNum, msg)));
            }
            else
            {
                var msg = ReturnGetRoomCard.CreateBuilder().SetUserRoomCard(RoomCardUtility.GetLongBaoNumber(info.unionid)).Build().ToByteArray();
                session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1023, msg.Length, requestInfo.MessageNum, msg)));
            }
        }
コード例 #2
0
        public void ExecuteCommand(GameSession session, ProtobufRequestInfo requestInfo)
        {
            var sendData = SendGroupInfoByGroupID.ParseFrom(requestInfo.Body);
            var userInfo = RedisUtility.Get <RedisUserInfoModel>(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERINFO, sendData.Openid, sendData.Unionid));

            if (userInfo == null || !userInfo.GroupID.Any(w => w == sendData.GroupID))
            {
                session.Close();
                return;
            }
            GroupInfoDAL groupInfoDAL    = new GroupInfoDAL();
            var          groupInfo       = groupInfoDAL.GetGroupInfoByGroupID(sendData.GroupID, userInfo.Type);
            var          returnGroupInfo = ReturnGroupInfoByGroupID.CreateBuilder();

            if (groupInfo != null)
            {
                var data = returnGroupInfo.SetStatus(1).SetCreateTime(TimeToLong.ConvertDateTimeInt(groupInfo.CreateTime)).SetGroupID(groupInfo.GroupID)
                           .SetGroupName(HttpUtility.UrlDecode(HttpUtility.UrlDecode(groupInfo.GroupName))).SetNikeName(HttpUtility.UrlDecode(HttpUtility.UrlDecode(groupInfo.NikeName))).SetCreateUserID(groupInfo.CreateUserID)
                           .SetGroupNumberPeople(groupInfoDAL.GetGroupPeopleNumber(sendData.GroupID)).Build().ToByteArray();
                session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1033, data.Length, requestInfo.MessageNum, data)));
            }
            else
            {
                var data = returnGroupInfo.SetStatus(0).Build().ToByteArray();
                session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1033, data.Length, requestInfo.MessageNum, data)));
            }
        }
コード例 #3
0
        public void ExecuteCommand(GameSession session, ProtobufRequestInfo requestInfo)
        {
            if (requestInfo.MessageResNum != 19990)
            {
                session.Close();
                session.Logger.Debug("非法用户请求 " + session.RemoteEndPoint.AddressFamily);
                return;
            }
            var RoomExist = SendRoomExist.ParseFrom(requestInfo.Body);
            var muInfo    = Gongyong.mulist.Find(w => w.Openid.Equals(RoomExist.Openid));

            if (muInfo == null)
            {
                var roomInfo = Gongyong.roomlist.Find(w => w.RoomID == RoomExist.RoomID);
                if (roomInfo != null)
                {
                    Gongyong.roomlist.Remove(roomInfo);
                }
                else
                {
                    RedisUtility.Remove(RedisUtility.GetKey(GameInformationBase.COMMUNITYROOMINFO, RoomExist.RoomID.ToString(), ""));
                }
                RedisUtility.Remove(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERGAME, RoomExist.Openid, RoomExist.Unionid));
                var data = ReturnRoomExist.CreateBuilder().SetIsExist(0).Build().ToByteArray();
                session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 9902, data.Length, 19990, data)));
            }
            else
            {
                var data = ReturnRoomExist.CreateBuilder().SetIsExist(1).Build().ToByteArray();
                session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 9902, data.Length, 19990, data)));
            }
        }
コード例 #4
0
ファイル: UserExitLogic.cs プロジェクト: zhaoy615/Guizhoule
        /// <summary>
        /// 解散牌桌
        /// </summary>
        /// <param name="r"></param>
        /// <param name="messageNum">返回消息号</param>
        /// <param name="type">解散类型</param>
        public void DissolutionRoom(Room r, int messageNum, int type)
        {
            List <mjuser> listuser = Gongyong.mulist.FindAll(u => u.RoomID == r.RoomID);
            var           Returnjs = ReturnAllIdea.CreateBuilder().SetState(1).SetMessgaeType(type);

            byte[] Sdata = Returnjs.Build().ToByteArray();
            //if (Gongyong.userlist.Count == 0)
            //    return;
            foreach (var item in listuser)
            {
                UserInfo user = Gongyong.userlist.Find(u => u.openid == item.Openid);
                if (user != null)
                {
                    //RedisUtility.Get<RedisLoginModel>(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERLIST, gameOperation.Openid, gameOperation.Unionid));
                    //将用户游戏信息更新
                    RedisUtility.Remove(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERGAME, user.openid, user.unionid));
                    //RedisUtility.Remove(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERLIST, user.openid, user.unionid));
                    user.session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 5007, Sdata.Length, messageNum, Sdata)));
                }
            }

            Gongyong.roomlist.Remove(r);
            Gongyong.mulist.RemoveAll(u => u.RoomID == r.RoomID);
            RedisUtility.Remove(RedisUtility.GetKey(GameInformationBase.COMMUNITYROOMINFO, r.RoomID.ToString(), ""));
            new RoomInfoDAL().UpdateEndRoomInfoByRoomInfoID(new RoomInfo {
                RoomInfoID = r.RoomInfoID, EndTime = DateTime.Now, EndStatus = type
            });
        }
コード例 #5
0
ファイル: UserExitLogic.cs プロジェクト: zhaoy615/Guizhoule
        /// <summary>
        /// 用户退出牌桌
        /// </summary>
        /// <param name="usermj"></param>
        /// <param name="roomID"></param>
        /// <param name="openid"></param>
        /// <param name="messageNum"></param>
        /// <param name="session"></param>
        /// <param name="isExit">是否已退出</param>
        public void UserExit(mjuser usermj, int roomID, string openid, int messageNum, GameSession session, bool isExit = false)
        {
            List <mjuser> listmjuser = Gongyong.mulist.FindAll(u => u.RoomID == roomID);

            ///判断是否该房间是否存在用户
            if (listmjuser.Count <= 0)
            {
                return;
            }

            ///向剩余用户下发推出玩家
            var  returnData = ReturnRemoveUser.CreateBuilder().SetOpenid(openid).SetStatus(1);
            Room r          = Gongyong.roomlist.Find(u => u.RoomID == roomID);

            if (r == null)
            {
                return;
            }
            //判断房间已开始游戏
            if (r.startgame == 1)
            {
                returnData.SetStatus(0);
                byte[] returnbyte = returnData.Build().ToByteArray();
                if (!isExit)
                {
                    session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 5009, returnbyte.Length, messageNum, returnbyte)));
                }
            }
            else
            {
                byte[] returnbyte = returnData.Build().ToByteArray();
                if (isExit)
                {
                    listmjuser.Remove(listmjuser.First(w => w.Openid.Equals(openid)));
                }
                r.listOpenid.Remove(openid);
                foreach (var item in listmjuser)
                {
                    UserInfo user = Gongyong.userlist.Find(u => u.openid == item.Openid);
                    if (user != null && user.session != null)
                    {
                        user.session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 5009, returnbyte.Length, messageNum, returnbyte)));
                    }

                    if (user.openid.Equals(usermj.Openid))
                    {
                        //将用户游戏信息更新
                        RedisUtility.Remove(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERGAME, user.openid, user.unionid));
                    }
                }
                Gongyong.mulist.Remove(usermj);
            }
        }
コード例 #6
0
ファイル: AddServer.cs プロジェクト: zhaoy615/Guizhoule
        /// <summary>
        /// 加入服务器
        /// </summary>
        /// <param name="session"></param>
        /// <param name="requestInfo"></param>
        public void ExecuteCommand(GameSession session, ProtobufRequestInfo requestInfo)
        {
            SendAddServer sendInfo = SendAddServer.ParseFrom(requestInfo.Body);
            var           key      = RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERINFO, sendInfo.Openid, sendInfo.Unionid);

            var userInfo = RedisUtility.Get <RedisUserInfoModel>(key);

            var returnAddServer = ReturnAddServer.CreateBuilder();

            if (userInfo == null)
            {
                returnAddServer.SetStatus(2);
            }
            else
            {
                returnAddServer.SetStatus(1);
                var info = Gongyong.userlist.Find(w => w.openid.Equals(userInfo.Openid));
                if (info == null)
                {
                    var user = new UserInfo(userInfo);
                    user.session = session;
                    Gongyong.userlist.Add(user);
                    session.Logger.Debug("加入游戏服务器成功----" + sendInfo.Openid + "------" + DateTime.Now);
                }
                else
                {
                    info.nickname = userInfo.Nickname;
                    info.sex      = userInfo.Sex;
                    info.headimg  = userInfo.Headimg;
                    if (info.session != null)
                    {
                        info.session.Close();
                    }
                    info.session = session;
                    mjuser mju = Gongyong.mulist.Find(u => u.Openid == info.openid);

                    if (mju != null)
                    {
                        mju.ConnectionStatus = 1;
                        // SendCL(session, info.openid, requestInfo);
                    }
                }
            }
            var data = returnAddServer.Build().ToByteArray();

            session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1012, data.Length, requestInfo.MessageNum, data)));
        }
コード例 #7
0
        public void ExecuteCommand(GameSession session, ProtobufRequestInfo requestInfo)
        {
            var sendData = SendGroupUserInfoByGroupID.ParseFrom(requestInfo.Body);
            var userInfo = RedisUtility.Get <RedisUserInfoModel>(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERINFO, sendData.Openid, sendData.Unionid));

            if (userInfo == null || !userInfo.GroupID.Any(w => w == sendData.GroupID))
            {
                // session.Close();
                return;
            }
            GroupInfoDAL groupInfoDAL    = new GroupInfoDAL();
            var          groupInfo       = groupInfoDAL.GetGroupInfoByGroupID(sendData.GroupID, userInfo.Type);
            var          returnGroupInfo = ReturnGroupUserInfoByGroupID.CreateBuilder();

            if (groupInfo != null)
            {
                var list = groupInfoDAL.GetGroupStaffInfoByGroupID(sendData.GroupID);
                if (list != null)
                {
                    foreach (var item in list)
                    {
                        var userInfoDB = new mjuserinfoDAL().GetModel(item.GroupUserID);
                        if (userInfoDB != null)
                        {
                            var groupUserInfo = GroupUserInfo.CreateBuilder();
                            groupUserInfo.SetGroupUserID(item.GroupUserID).SetNickName(HttpUtility.UrlDecode(HttpUtility.UrlDecode(userInfoDB.nickname)))
                            .SetPicture(userInfoDB.headimg).SetStatus(0);
                            if (Gongyong.userlist.Any(w => w.UserID.Equals(item.GroupUserID)))
                            {
                                groupUserInfo.SetStatus(1);
                            }
                            if (RedisUtility.Get <RedisGameModel>(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERGAME, userInfoDB.openid, userInfoDB.unionid)) != null)
                            {
                                groupUserInfo.SetStatus(2);
                            }
                            returnGroupInfo.AddUserList(groupUserInfo);
                        }
                    }
                    var data = returnGroupInfo.SetStatus(1).Build().ToByteArray();
                    session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1035, data.Length, requestInfo.MessageNum, data)));
                    return;
                }
            }
            var dataF = returnGroupInfo.SetStatus(0).Build().ToByteArray();

            session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1035, dataF.Length, requestInfo.MessageNum, dataF)));
        }
コード例 #8
0
ファイル: GetGroupInfo.cs プロジェクト: zhaoy615/Guizhoule
        public void ExecuteCommand(GameSession session, ProtobufRequestInfo requestInfo)
        {
            List <GroupInfo> groupInfoList = new List <GroupInfo>();
            var requestGroupInfo           = SendGroupInfo.ParseFrom(requestInfo.Body);
            RedisUserInfoModel user        = RedisUtility.Get <RedisUserInfoModel>(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERINFO, requestGroupInfo.Openid, requestGroupInfo.Unionid));

            if (user == null)
            {
                session.Logger.Debug(string.Format("缓存无此用户{0}", string.IsNullOrEmpty(requestGroupInfo.Openid) ? "用户openid为空" : ""));
                return;
            }
            GroupInfoDAL groupInfoDAL    = new GroupInfoDAL();
            var          list            = groupInfoDAL.GetGroupIDListByUserID(user.UserID, user.Type);
            var          returnGroupInfo = ReturnGroupInfo.CreateBuilder();
            var          GroupInfodata   = GroupInfo.CreateBuilder();

            Byte[] returnGroupInfoData = null;
            if (list == null || list.Count == 0)
            {
                returnGroupInfoData = returnGroupInfo.Build().ToByteArray();
                session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1031, returnGroupInfoData.Length, requestInfo.MessageNum, returnGroupInfoData)));
            }
            else
            {
                foreach (var GroupID in list.Distinct())
                {
                    DAL.Model.GroupInfo groupInfoModel = groupInfoDAL.GetGroupInfoByGroupID(GroupID, user.Type);
                    if (groupInfoModel != null)
                    {
                        if (groupInfoModel.CreateUserID == user.UserID)
                        {
                            GroupInfodata.SetGroupID(GroupID).SetGroupIntroduction(groupInfoModel.GroupIntroduction ?? "").SetGroupName(HttpUtility.UrlDecode(HttpUtility.UrlDecode(groupInfoModel.GroupName))).SetNikeName(groupInfoModel.GroupName).SetRoomCardCounts(RoomCardUtility.GetRoomCard(groupInfoModel.CreateUserID)).SetCreateTime(TimeToLong.ConvertDateTimeInt(groupInfoModel.CreateTime)).SetIsGroupLord(true);
                            returnGroupInfo.AddGroupInfo(GroupInfodata);
                            //data.SetGroupInfo(1,GroupInfo)
                        }
                        else
                        {
                            GroupInfodata.SetGroupID(GroupID).SetGroupIntroduction(groupInfoModel.GroupIntroduction ?? "").SetGroupName(HttpUtility.UrlDecode(HttpUtility.UrlDecode(groupInfoModel.GroupName))).SetNikeName(groupInfoModel.GroupName).SetRoomCardCounts(RoomCardUtility.GetRoomCard(groupInfoModel.CreateUserID)).SetCreateTime(TimeToLong.ConvertDateTimeInt(groupInfoModel.CreateTime)).SetIsGroupLord(false);
                            returnGroupInfo.AddGroupInfo(GroupInfodata);
                        }
                    }
                }
                returnGroupInfoData = returnGroupInfo.Build().ToByteArray();
                session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1031, returnGroupInfoData.Length, requestInfo.MessageNum, returnGroupInfoData)));
            }
        }
コード例 #9
0
ファイル: CreateRoom.cs プロジェクト: zhaoy615/Guizhoule
        public int GetRoomID()
        {
            int roomid = 0;

            do
            {
                roomid = ran.Next(100000, 999999);
                Room rst = Gongyong.roomlist.Find(u => u.RoomID == roomid);
                RedisGameRoomInfo roominfo = RedisUtility.Get <RedisGameRoomInfo>(RedisUtility.GetKey(GameInformationBase.COMMUNITYROOMINFO, roomid.ToString(), ""));
                if (roominfo == null)
                {
                    break;
                }
                else if (roominfo.ServerName.Equals(GameInformationBase.serverName))
                {
                    break;
                }
            } while (true);


            return(roomid);
        }
コード例 #10
0
ファイル: Feedback.cs プロジェクト: zhaoy615/Guizhoule
        public void ExecuteCommand(GameSession session, ProtobufRequestInfo requestInfo)
        {
            //if (!Gongyong.userlist.Any(w => w.session.SessionID.Equals(session.SessionID)))
            //{
            //    session.Logger.Debug("非法连接");
            //    session.Close();
            //    return;
            //}
            var             sendInfo = SendFeedback.ParseFrom(requestInfo.Body);
            RedisLoginModel olduser  = RedisUtility.Get <RedisLoginModel>(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERLIST, sendInfo.Openid, sendInfo.Unionid));

            if (olduser == null)
            {
                session.Close();
                return;
            }

            Feedback_log fb = new Feedback_log();

            fb.UserID = sendInfo.UserID;
            fb.Title  = sendInfo.Title;
            if (sendInfo.HasContent)
            {
                fb.Content = sendInfo.Content;
            }
            fb.Datetime = DateTime.Now;
            if (sendInfo.HasGameLog)
            {
                fb.GameLog = sendInfo.GameLog;
            }
            if (sendInfo.HasImage)
            {
                fb.image = sendInfo.Image;
            }
            new FeedbackDAL().Add(fb);
        }
コード例 #11
0
ファイル: AddRoom.cs プロジェクト: zhaoy615/Guizhoule
        public void ExecuteCommand(GameSession session, ProtobufRequestInfo requestInfo)
        {
            if (!Gongyong.userlist.Any(w => w.session.SessionID.Equals(session.SessionID)))
            {
                session.Logger.Debug("AddRoom : 非法连接");
                session.Close();
                return;
            }
            ///定义返回状态码
            string          staut    = "10000";
            var             nowsend  = ReturnAddRoom.CreateBuilder();
            List <Userinfo> listuser = new List <Userinfo>();
            ///当前返回信息
            var getdata = SendAddRoom.ParseFrom(requestInfo.Body);
            ///根据上传信息查找房间
            Room rm      = Gongyong.roomlist.Find(u => u.RoomID == getdata.RoomID);
            var  roommsg = ReturnRoomMsg.CreateBuilder();
            //储存IP
            List <UserInfo> ListUserIP = new List <UserInfo>();

            if (rm != null)
            {
                List <mjuser> mulist = Gongyong.mulist.FindAll(u => u.RoomID == getdata.RoomID);
                mjuser        mjuser = Gongyong.mulist.Find(u => u.RoomID == getdata.RoomID && u.Openid == getdata.Openid);

                if (mulist.Count == rm.room_peo)
                {
                    staut = "10002";
                }
                else
                {
                    List <int> shuzhu = new List <int>()
                    {
                        1, 2, 3, 4
                    };
                    ///移除以坐的方位,并添加以有玩家信息
                    var senddata = ReturnUserInfo.CreateBuilder();

                    //for(int i=0;i< mulist.Count();i++)
                    foreach (mjuser item in mulist)
                    {
                        UserInfo gamer = Gongyong.userlist.Find(u => u.openid == item.Openid);
                        Userinfo users = Userinfo.CreateBuilder().SetHeadimg(gamer.headimg).SetNickname(gamer.nickname).SetOpenid(gamer.openid).SetSex(int.Parse(gamer.sex)).SetUserFW(item.ZS_Fw).SetUserBean(0).SetUserGold(0).SetUserID(gamer.UserID).SetUserIP(gamer.UserIP).Build();
                        listuser.Add(users);
                        shuzhu.Remove(item.ZS_Fw);
                        senddata.AddUserinfo(users);
                        nowsend.AddUserinfo(users);
                    }
                    if (mjuser != null)
                    {
                        return;
                    }
                    else
                    {
                        ///添加新加入玩家信息
                        mjuser mj = new mjuser()
                        {
                            Openid             = getdata.Openid,
                            ZS_Fw              = shuzhu[0],
                            RoomID             = getdata.RoomID,
                            ConfirmationStarts = true,
                            SendData           = new List <ArraySegment <byte> >(),
                            IsGuoHu            = false
                        };
                        Gongyong.mulist.Add(mj);
                    }


                    ///将当前的用户信息添加到下发文件包
                    UserInfo gameuser = Gongyong.userlist.Find(u => u.openid == getdata.Openid);
                    gameuser.Lat = getdata.Latitude;
                    Userinfo newuser = Userinfo.CreateBuilder().SetHeadimg(gameuser.headimg).SetNickname(gameuser.nickname).SetOpenid(gameuser.openid).SetSex(int.Parse(gameuser.sex)).SetUserFW(shuzhu[0]).SetUserGold(0).SetUserBean(0).SetUserID(gameuser.UserID).SetUserIP(gameuser.UserIP).Build();
                    listuser.Add(newuser);
                    senddata.AddUserinfo(newuser);
                    nowsend.AddUserinfo(newuser);
                    List <mjuser> mu       = Gongyong.mulist.FindAll(u => u.RoomID == getdata.RoomID);
                    var           dis      = ReturnDis.CreateBuilder();
                    var           closeGPS = ReturnCloseGPS.CreateBuilder();

                    ///向已有玩家下发信息
                    foreach (mjuser items in mu)
                    {
                        UserInfo gamersend = Gongyong.userlist.Find(u => u.openid == items.Openid);
                        if (gamersend.Lat.Equals("0,0") || string.IsNullOrEmpty(gamersend.Lat))
                        {
                            //Console.WriteLine("AddRoom : " + gamersend.session.Config.Ip + " lat 为 0");
                            //Console.WriteLine(" : " + mjuser.)
                            closeGPS.AddFW(items.ZS_Fw);
                            //gamersend.session.Send(new ArraySegment<byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 7091, dataGPS.Length, requestInfo.MessageNum, dataGPS)));
                        }
                        else if (gameuser.Lat.Equals("0,0") || string.IsNullOrEmpty(gameuser.Lat))
                        {
                            if (items.Openid.Equals(gameuser.openid))
                            {
                                //Console.WriteLine("AddRoom : " + gamersend.session.Config.Ip + " lat 为 0");
                                if (!closeGPS.FWList.Any(w => w == items.ZS_Fw))
                                {
                                    closeGPS.AddFW(items.ZS_Fw);
                                }
                            }
                        }
                        else
                        {
                            var userdis = ReturnDis.CreateBuilder();


                            //double jl = Erth.GetDistance(gamersend.Lat, gameuser.Lat);
                            double jl = 1;  //  测试修改
                            if (shuzhu[0] != items.ZS_Fw)
                            {
                                //if (jl < GameInformationBase.DISTANCE)
                                if (jl < 0.001f) //任光粤测试修改
                                {
                                    Console.WriteLine("距离为 : " + jl + gamersend.nickname + ":" + gamersend.Lat + " , " + gameuser.nickname + " : " + gameuser.Lat);
                                    rm.Is_Jin = true;

                                    rm.Juser1 = shuzhu[0];
                                    rm.Juser2 = items.ZS_Fw;
                                }
                            }
                            dis.SetDis(jl.ToString());
                            dis.SetFW(items.ZS_Fw);
                            userdis.SetFW(shuzhu[0]);
                            userdis.SetDis(jl.ToString());
                            ListUserIP.Add(gamersend);


                            byte[]    dataMJ     = userdis.Build().ToByteArray();
                            byte[]    datauser   = dis.Build().ToByteArray();
                            AppServer userserver = new AppServer();
                            gamersend.session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 7091, dataMJ.Length, requestInfo.MessageNum, dataMJ)));
                            gameuser.session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 7091, datauser.Length, requestInfo.MessageNum, datauser)));
                        }
                        System.Threading.Thread.Sleep(100);
                        byte[] data = senddata.Build().ToByteArray();
                        gamersend.session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 2005, data.Length, requestInfo.MessageNum, data)));
                        ///如果人数满足,下发游戏开始信息
                        if (mu.Count == rm.room_peo)
                        {
                            //牌局回放保存用户信息
                            rm.gameOperationProcess.SetUserInfo(senddata);
                            foreach (var item in Gongyong.mulist.FindAll(u => u.RoomID == rm.RoomID))
                            {
                                if (!item.ConfirmationStarts)
                                {
                                    rm.startgame = 2;
                                }
                            }
                            rm.startgame = rm.startgame == 2 ? 0 : 1;

                            //ReturnStart startgame = ReturnStart.CreateBuilder().SetStart(1).Build();
                            //byte[] bstart = startgame.ToByteArray();
                            //gamersend.session.TrySend(new ArraySegment<byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 2008, bstart.Length, requestInfo.MessageNum, bstart)));
                        }
                    }

                    if (closeGPS.FWCount > 0)
                    {
                        foreach (mjuser items in mu)
                        {
                            var      dataGPS   = closeGPS.Build().ToByteArray();
                            UserInfo gamersend = Gongyong.userlist.Find(u => u.openid == items.Openid);
                            gamersend.session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 7097, dataGPS.Length, requestInfo.MessageNum, dataGPS)));
                        }
                    }
                }
            }
            else
            {
                staut = "10001";
            }
            ///判断房间不为空 发生房间信息
            if (rm != null)
            {
                roommsg.SetCount(rm.count)
                .SetIsBenji(rm.is_benji == true ? 1 : 0)
                .SetIsShangxiaji(rm.is_shangxiaji == true ? 1 : 0)
                .SetIsWgj(rm.is_wgj == true ? 1 : 0)
                .SetIsXinqiji(rm.is_xinqiji == true ? 1 : 0)
                .SetIsYikousan(rm.is_yikousan == true ? 1 : 0)
                .SetRoomPeo(rm.room_peo)
                .SetIsLianzhuang(rm.is_lianz == true ? 1 : 0)
                .SetIsYuanque(rm.IsYuanQue ? 1 : 0)
                .SetQuickCard(rm.QuickCard?1:0);
                byte[] roommsgb = roommsg.Build().ToByteArray();


                session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 7003, roommsgb.Length, requestInfo.MessageNum, roommsgb)));
            }



            System.Threading.Thread.Sleep(100);
            nowsend.SetState(int.Parse(staut));

            byte[] datanew = nowsend.Build().ToByteArray();
            session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 2004, datanew.Length, requestInfo.MessageNum, datanew)));

            //如果有玩家距离过近,提醒牌桌所有用户,并接受确认
            if (rm.Is_Jin)
            {
                byte[] jusers = ReturnIsJ.CreateBuilder().SetFWO(rm.Juser1).SetFWW(rm.Juser2).Build().ToByteArray();
                rm.startgame = 0;

                SendRoomAllUser(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 7092, jusers.Length, requestInfo.MessageNum, jusers)), getdata.RoomID);
            }
            List <UserInfo> waringList = new List <UserInfo>();

            //如果有玩家IP一样
            foreach (var item in ListUserIP)
            {
                if (ListUserIP.Where(w => w.UserIP.Equals(item.UserIP)).Count() > 1)
                {
                    waringList.Add(item);
                }
            }
            if (waringList.Count > 1)
            {
                var ipSame = ReturnIPSame.CreateBuilder();
                foreach (var item in ListUserIP)
                {
                    var userInfo = Gongyong.mulist.First(w => w.Openid.Equals(item.openid));
                    if (userInfo != null)
                    {
                        ipSame.AddFW(userInfo.ZS_Fw);
                    }
                }
                var jusers = ipSame.Build().ToByteArray();
                rm.startgame = 0;
                SendRoomAllUser(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 7093, jusers.Length, requestInfo.MessageNum, jusers)), getdata.RoomID);
            }
            rm.gameOperationProcess.SetMessage(roommsg);//牌局回放保存房间信息
            session.Logger.Debug("用户请求加入房间:" + getdata.RoomID + ",openid:" + getdata.Openid + "----------" + DateTime.Now);
            if (rm.startgame == 1)
            {
                //将牌桌信息保存
                RedisUtility.Set <RedisGameRoomInfo>(RedisUtility.GetKey(GameInformationBase.COMMUNITYROOMINFO, rm.RoomID.ToString(), ""),
                                                     new RedisGameRoomInfo {
                    room = rm, ServerName = GameInformationBase.serverName
                });
                foreach (var item in Gongyong.mulist.FindAll(u => u.RoomID == rm.RoomID))
                {
                    if (!item.ConfirmationStarts)
                    {
                        return;
                    }
                }
                session.Logger.Debug("发牌");
                ///查找当前玩家集合
                List <mjuser> mjList = Gongyong.mulist.FindAll(u => u.RoomID == rm.RoomID);

                CardsLogic logic  = new CardsLogic();
                int        number = 0;//发牌次数,从0开始计数

                //根据
                ///获取房主信息
                ///


                string homeownerOpenid = "";
                foreach (var item in mjList)
                {
                    if (item.IsHomeowner)
                    {
                        //如果是房主,记录该房主的openid
                        homeownerOpenid = item.Openid;
                    }
                }


                var roominfodal  = new RoomInfoDAL();
                var createuserid = roominfodal.GetCreateUserIdByRoomId(rm.RoomID);
                //var groupid = roominfodal.GetGroupInfoByGroupID(createuserid);
                var groupid = rm.GroupID;

                //不是圈子用户,直接进行扣费
                if (groupid == 0)
                {
                    RoomCardUtility.ReduceRoomCard(createuserid, (rm.count / 4) * 1);
                }
                else
                {
                    GroupInfoDAL groupInfoDAL      = new GroupInfoDAL();
                    var          creategroupuderid = groupInfoDAL.GetUserIDByGuoupID(groupid);
                    var          reducecount       = (rm.count / 8) * 1;
                    RoomCardUtility.ReduceRoomCard(creategroupuderid, reducecount);

                    ////向日志里面添加朋友圈耗卡信息
                    groupInfoDAL.AddCreateRoomRecord(creategroupuderid, groupid, rm.RoomID, reducecount);
                }

                var dcount = rm.Dcount;
                foreach (var item in mjList)
                {
                    ReturnStartGame.Builder    sendmj        = ReturnStartGame.CreateBuilder();
                    ReturnGang.Builder         ReturnGangMSG = ReturnGang.CreateBuilder();
                    List <model.ServerMaJiang> Ruturnjsmj    = new List <model.ServerMaJiang>();
                    item.paixinfs = 5;
                    Gongyong.mulist.Remove(item);
                    if (rm.IsYuanQue)
                    {
                        item.QYM = 3;
                    }
                    logic.GetMyCards(requestInfo, sendmj, ReturnGangMSG, Ruturnjsmj, session, rm.RoomID, item, item.Openid, ref dcount);
                }
            }
        }
コード例 #12
0
ファイル: CreateRoom.cs プロジェクト: zhaoy615/Guizhoule
        // public string Name => "CreateRoom";

        public void ExecuteCommand(GameSession session, ProtobufRequestInfo requestInfo)
        {
            if (!Gongyong.userlist.Any(w => w.session.SessionID.Equals(session.SessionID)))
            {
                session.Logger.Debug("CreateRoom : 非法连接");
                session.Close();
                return;
            }
            session.Logger.Debug("创建sssionID--------" + session.SessionID);

            var info = SendCreateRoom.ParseFrom(requestInfo.Body);
            ///当前用户信息
            UserInfo user = Gongyong.userlist.Find(u => u.openid.Equals(info.Openid));

            if (user == null)
            {
                session.Logger.Debug("CREATEROOM user == nulll");
                session.Close();
                return;
            }
            if (Gongyong.mulist.Any(w => w.Openid.Equals(info.Openid)))
            {
                var muInfo = Gongyong.mulist.Find(w => w.Openid.Equals(info.Openid));
                if (Gongyong.roomlist.Any(w => w.RoomID == muInfo.RoomID))
                {
                    // ReturnServerIP.CreateBuilder().SetIp
                }
                else
                {
                    Gongyong.mulist.Remove(muInfo);
                }
            }
            ///更具房间信息创建房间
            int roomid = GetRoomID();

            if (info.Count != 8 && info.Count != 16 && info.Count != 32)
            {
                return;
            }
            Room room = new Room()
            {
                count = info.Count,
                //count = 1,
                is_benji      = info.IsBenji == 1 ? true : false,
                is_wgj        = info.IsWgj == 1 ? true : false,
                is_xinqiji    = info.IsXinqiji == 1 ? true : false,
                is_yikousan   = info.IsYikousan == 1 ? true : false,
                is_shangxiaji = info.IsShangxiaji == 1 ? true : false,
                room_peo      = info.RoomPeo,
                Dcount        = 1,
                RoomID        = roomid,
                GroupID       = info.GroupID,
                startgame     = 0,
                is_lianz      = info.IsYikousan == 3 ? true : false,
                CreateDate    = DateTime.Now,
                IsYuanQue     = info.HasRoomPeo ? (info.RoomPeo == 4 ? false : (info.HasIsYuanque ? info.IsYuanque == 1 : false)) : false, //如果是4人桌 不能是原缺。
                QuickCard     = info.HasQuickCard ? (info.QuickCard == 1) : false                                                          //十秒快速出牌
                                                                                                                                           // RoomPai = new CreateMj().CreateMJ()
            };

            //Console.WriteLine("roomid : " + roomid);
            try
            {
                new RoomInfoDAL().Add(CardsLogic.SetRoomInfoTb(room, user.UserID), info.GroupID);
            }
            catch (Exception ex)
            {
                session.Logger.Error(ex);
            }
            Gongyong.roomlist.Add(room);

            user.Lat = info.Latitude;

            //将用户游戏信息更新
            RedisUtility.Set <RedisGameModel>(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERGAME, user.openid, user.unionid),
                                              new RedisGameModel {
                Openid = user.openid, RoomID = roomid, ServerName = GameInformationBase.serverName, Unionid = user.unionid
            });
            //将牌桌信息保存
            RedisUtility.Set <RedisGameRoomInfo>(RedisUtility.GetKey(GameInformationBase.COMMUNITYROOMINFO, roomid.ToString(), ""),
                                                 new RedisGameRoomInfo {
                room = room, ServerName = GameInformationBase.serverName
            });


            ///麻将玩家操作类
            mjuser mu = new mjuser()
            {
                ZS_Fw              = 1,
                Openid             = user.openid,
                RoomID             = roomid,
                SendData           = new List <ArraySegment <byte> >(),
                ConfirmationStarts = true,
                IsGuoHu            = false
            };

            Gongyong.mulist.Add(mu);


            if (mu.ByteData == requestInfo.Key)
            {
                return;
            }
            else
            {
                mu.ByteData = requestInfo.Key;
            }
            mu.IsHomeowner = true;
            ///当前返回用户信息
            Userinfo uinfo = Userinfo.CreateBuilder().SetHeadimg(user.headimg).SetNickname(user.nickname).SetOpenid(user.openid).SetSex(int.Parse(user.sex)).SetUserFW(1).SetUserBean(0).SetUserGold(0).SetUserID(user.UserID).SetUserIP(user.UserIP).Build();
            ///返回数值
            ReturnCreateRoom cr = ReturnCreateRoom.CreateBuilder().SetRoomID(roomid).SetUserinfo(uinfo).Build();

            byte[] data = cr.ToByteArray();
            session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 2002, data.Length, requestInfo.MessageNum, data)));

            var roommsg = ReturnRoomMsg.CreateBuilder();

            roommsg.SetCount(room.count).SetIsBenji(room.is_benji ? 1 : 0)
            .SetIsShangxiaji(room.is_shangxiaji ? 1 : 0)
            .SetIsWgj(room.is_wgj ? 1 : 0)
            .SetIsXinqiji(room.is_xinqiji ? 1 : 0)
            .SetIsYikousan(room.is_yikousan ? 1 : 0).SetRoomPeo(room.room_peo)
            .SetIsLianzhuang(room.is_lianz ? 1 : 0)
            .SetIsYuanque(room.IsYuanQue ? 1 : 0)
            .SetQuickCard(room.QuickCard ? 1 : 0)
            ;
            byte[] roommsgb = roommsg.Build().ToByteArray();
            session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 7003, roommsgb.Length, requestInfo.MessageNum, roommsgb)));
            session.Logger.Debug("参数data" + cr + "----------" + DateTime.Now);
            session.Logger.Debug("当前用户创建房间----" + roomid + "------" + DateTime.Now);
        }
コード例 #13
0
ファイル: GetH.cs プロジェクト: zhaoy615/Guizhoule
        public void ExecuteCommand(GameSession session, ProtobufRequestInfo requestInfo)
        {
            string userWinLose = string.Empty;//玩家输赢记录。房间信息表


            if (!Gongyong.userlist.Any(w => w.session.SessionID.Equals(session.SessionID)))
            {
                session.Logger.Debug("GetH : 非法连接");
                session.Close();
                return;
            }
            var getdata = SendHu.ParseFrom(requestInfo.Body);

            Room r = Gongyong.roomlist.Find(u => u.RoomID == getdata.Roomid);

            if (r == null)
            {
                return;
            }
            if (!r.Is_Hu)
            {
                session.Logger.Debug("房间并无胡牌");
                return;
            }
            ThreadUtility.RemoveManagedThreadByRoomID(r.RoomID);
            CardUser card = Gongyong.FKUser.Find(u => u.roomid == getdata.Roomid);

            model.ServerMaJiang mjfh = new model.ServerMaJiang();
            var jp     = ReturnFJ.CreateBuilder();
            var muuser = Gongyong.mulist.Find(u => u.Openid.Equals(getdata.Openid) && u.RoomID == getdata.Roomid);

            if (muuser == null)
            {
                return;
            }
            muuser.Is_jiao = true;
            if (muuser.ByteData == requestInfo.Key)
            {
                return;
            }
            else
            {
                muuser.ByteData = requestInfo.Key;
            }

            var huType = ReturnHType.CreateBuilder().SetFWZ(getdata.FWZ).SetFWB(getdata.FWB).SetMJ(getdata.MJ).SetType(getdata.Type);

            if (getdata.DXInfoCount > 1)
            {
                huType.AddRangeDXInfo(getdata.DXInfoList);
            }
            byte[] HType = huType.Build().ToByteArray();
            if (getdata.Type != 1 && getdata.Type != 5)
            {
                model.ServerMaJiang mjh = new model.ServerMaJiang()
                {
                    PaiHs = getdata.MJ.PaiHS,
                    PaiId = getdata.MJ.PaiID
                };

                var roomUsers = Gongyong.mulist.FindAll(u => u.RoomID == getdata.Roomid);
                if (getdata.DXInfoCount > 1)
                {
                    for (int i = 0; i < getdata.DXInfoList.Count; i++)
                    {
                        foreach (var item in roomUsers)
                        {
                            if (item.ZS_Fw == getdata.DXInfoList[i].DXFW)//如果当期玩家为一炮多响的玩家之一,则在手牌中加上 放炮的牌
                            {
                                item.majiangs.Add(mjh);
                            }
                        }
                    }
                }
                else
                {
                    roomUsers.Find(u => u.ZS_Fw == getdata.FWZ).majiangs.Add(mjh);
                }
            }

            if (getdata.Type == 1 || getdata.Type == 5)
            {
                Gongyong.mulist.Find(u => u.ZS_Fw == getdata.FWZ && u.RoomID == getdata.Roomid).zm_count += 1;
            }
            else
            {
                var mjInfo = Gongyong.mulist.Find(u => u.ZS_Fw == getdata.FWB && u.RoomID == getdata.Roomid);
                mjInfo.dp_count += 1;
                mjInfo.chuda.RemoveAll(w => w.PaiHs == getdata.MJ.PaiHS && w.PaiId == getdata.MJ.PaiID);
            }


            ///没有翻鸡牌
            if (r.RoomPai.Count == 0)
            {
                mjfh.PaiHs = -1;
                mjfh.PaiId = 0;
            }
            else
            {
                mjfh = r.RoomPai[0];
            }



            jp.SetHS(mjfh.PaiHs);
            ///清除牌
            r.RoomPai.Clear();

            List <mjuser>     mjlist      = Gongyong.mulist.FindAll(u => u.RoomID == getdata.Roomid);
            var               settle      = ReturnJS.CreateBuilder();
            var               returnallmj = ReturnUserSPai.CreateBuilder();
            List <UserSettle> listjs      = new List <UserSettle>();

            listjs = new Ting().Settle(r.RoomID, mjfh, getdata);
            var senddjs = ReturnDJS.CreateBuilder();

            if (getdata.DXInfoCount <= 1)
            {
                if (getdata.FWZ != card.win)
                {
                    card.win        = getdata.FWZ;
                    card.lianzCount = 1;
                }
                else// (getdata.FWZ == card.win)
                {
                    card.lianzCount += 1;
                }
            }
            else
            {//连庄情况 ,庄家放炮,胡牌的庄, 一炮多响情况 就是 胡牌的最近的人是庄
             //一炮多响非连庄,  谁放炮 谁是庄
                if (r.is_lianz)
                {
                    int zhuang = 0;
                    if (getdata.FWB == card.win)
                    {
                        if (getdata.FWB == 4)
                        {
                            zhuang = 1;
                        }
                        else
                        {
                            zhuang = getdata.FWB + 1;
                        }
                        for (int i = 1; i <= 4; i++)
                        {
                            if (getdata.FWB == 4)
                            {
                                zhuang = 1;
                            }
                            if (getdata.DXInfoList.Any(w => w.DXFW == zhuang))
                            {
                                card.win = zhuang;
                                break;
                            }
                            zhuang++;
                        }
                    }
                    else
                    {
                        card.lianzCount += 1;
                    }
                }
                else
                {
                    card.win = getdata.FWB;
                }                               //非连庄谁放炮谁 是庄
            }

            foreach (var item in mjlist)
            {
                var jsddr = UserAJS.CreateBuilder();
                #region 旧代码
                //if (item.ZS_Fw == getdata.FWZ)
                //{
                //    ///判断清一色
                //    //if (item.majiangs[item.majiangs.Count - 1].PaiHs - item.majiangs[0].PaiHs < 8)
                //    //{
                //    //    int paihs = item.majiangs[0].PaiHs;
                //    //    int qyshs = 0;
                //    //    int qy = 0;
                //    //    if (paihs < 10)
                //    //    {
                //    //        qyshs = 1;
                //    //    }
                //    //    else if (paihs > 10 && paihs < 20)
                //    //    {
                //    //        qyshs = 2;
                //    //    }
                //    //    else
                //    //    {
                //    //        qyshs = 3;
                //    //    }

                //    //    switch (qyshs)
                //    //    {

                //    //        case 1:
                //    //            int count = item.Peng.FindAll(u => u.PaiHs > 10).Count;
                //    //            if (count > 0)
                //    //            {
                //    //                qy++;
                //    //            }
                //    //            if (!string.IsNullOrEmpty(item.Gong))
                //    //            {
                //    //                string gong = string.Copy(item.Gong);
                //    //                string[] arr = gong.Remove(gong.Length - 1, 1).Split(',');
                //    //                foreach (var itemgong in arr)
                //    //                {
                //    //                    if (int.Parse(itemgong[0].ToString()) > 10)
                //    //                    {
                //    //                        qy++;
                //    //                    }
                //    //                }
                //    //            }

                //    //            break;
                //    //        case 2:

                //    //            int countt = item.Peng.FindAll(u => u.PaiHs < 10 || u.PaiHs > 20).Count;
                //    //            if (countt > 0)
                //    //            {
                //    //                qy++;
                //    //            }
                //    //            if (!string.IsNullOrEmpty(item.Gong))
                //    //            {
                //    //                string gong = string.Copy(item.Gong);
                //    //                string[] arr = gong.Remove(gong.Length - 1, 1).Split(',');
                //    //                foreach (var itemgong in arr)
                //    //                {
                //    //                    if (int.Parse(itemgong[0].ToString()) < 10 || int.Parse(itemgong[0].ToString()) > 20)
                //    //                    {
                //    //                        qy++;
                //    //                    }
                //    //                }
                //    //            }

                //    //            break;
                //    //        case 3:

                //    //            int countw = item.Peng.FindAll(u => u.PaiHs < 20).Count;
                //    //            if (countw > 0)
                //    //            {
                //    //                qy++;
                //    //            }
                //    //            if (!string.IsNullOrEmpty(item.Gong))
                //    //            {
                //    //                string gong = string.Copy(item.Gong);
                //    //                string[] arr = gong.Remove(gong.Length - 1, 1).Split(',');
                //    //                foreach (var itemgong in arr)
                //    //                {
                //    //                    if (int.Parse(itemgong[0].ToString()) < 20)
                //    //                    {
                //    //                        qy++;
                //    //                    }
                //    //                }
                //    //            }

                //    //            break;
                //    //        default:
                //    //            break;
                //    //    }
                //    //    if (qy == 0)
                //    //    {
                //    //        item.paixinfs = 10;
                //    //    }

                //    //}
                //}
                #endregion


                UserInfo user    = Gongyong.userlist.Find(u => u.openid == item.Openid);
                var      usermjs = UserSPai.CreateBuilder();
                usermjs.SetFw(item.ZS_Fw);
                var returnmj = MaJiang.CreateBuilder();
                foreach (var itemmj in item.majiangs)
                {
                    returnmj.SetPaiHS(itemmj.PaiHs);
                    returnmj.SetPaiID(itemmj.PaiId);
                    usermjs.AddMj(returnmj);
                }
                returnallmj.AddUsp(usermjs);
                UserInfo gamer = Gongyong.userlist.Find(u => u.openid == item.Openid);
                var      users = Userinfo.CreateBuilder().SetHeadimg(gamer.headimg).SetNickname(gamer.nickname).SetOpenid(gamer.openid).SetSex(int.Parse(gamer.sex)).SetUserFW(item.ZS_Fw).SetUserBean(0).SetUserGold(0).SetUserID(gamer.UserID).Build();
                ///分数加减
                foreach (var items in listjs)
                {
                    if (items.openid == item.Openid)
                    {
                        var usersone = UserJS.CreateBuilder();

                        foreach (var itrmj in items.jp)
                        {
                            var jpone = JiPaiF.CreateBuilder().SetPaiHS(itrmj.PaiHS).SetType(itrmj.type).SetCount(itrmj.PaiScare);
                            usersone.AddJp(jpone);
                        }
                        foreach (var itemD in items.gang)
                        {
                            var jpdou = Dou.CreateBuilder().SetCount(itemD.DScare).SetType(itemD.DType);
                            usersone.AddDc(jpdou);
                        }
                        if (getdata.HasFWB)
                        {
                            var info = mjlist.Find(w => w.ZS_Fw == getdata.FWB && w.Openid.Equals(items.openid));
                            if (info != null)
                            {
                                if (items.pai_type != 11)
                                {
                                    items.pai_type = 11;
                                }
                            }
                        }
                        usersone.SetIsPao(items.pai_type);
                        usersone.SetIsJiao(items.is_jiao);
                        usersone.SetFS(items.scare);
                        usersone.SetUserinfo(users);
                        usersone.SetDyFs(items.dy_fs);
                        var HuLeiXin = getdata.DXInfoList.FirstOrDefault(w => w.DXFW == item.ZS_Fw);
                        if (HuLeiXin != null)
                        {
                            usersone.SetHuType(HuLeiXin.DXType);
                        }

                        settle.AddJs(usersone);


                        switch (item.ZS_Fw)
                        {
                        case 1:
                            card.dong += items.scare;
                            break;

                        case 2:
                            card.nan += items.scare;
                            break;

                        case 3:
                            card.xi += items.scare;
                            break;

                        case 4:
                            card.bei += items.scare;
                            break;

                        default:
                            break;
                        }
                    }
                }



                ///牌局结束,返回大结算
                if (r.Dcount == r.count)
                {
                    new CardsLogic().Clear(item, r);
                    jsddr.SetUser(users);
                    jsddr.SetZdou(item.zwd_count);
                    jsddr.SetZimo(item.zm_count);
                    jsddr.SetAndou(item.ad_count);
                    jsddr.SetMdou(item.MD_count);
                    jsddr.SetDianpao(item.dp_count);

                    //switch (item.ZS_Fw)
                    //{
                    //    case 1:
                    //        jsddr.SetScare(card.dong);
                    //        break;
                    //    case 2:
                    //        jsddr.SetScare(card.nan);
                    //        break;
                    //    case 3:
                    //        jsddr.SetScare(card.xi);
                    //        break;
                    //    case 4:
                    //        jsddr.SetScare(card.bei);
                    //        break;
                    //    default:
                    //        break;
                    //}
                    jsddr.SetScare(card.GetScoreByPosition(item.ZS_Fw));
                    senddjs.AddUserjs(jsddr);
                    senddjs.SetState(1);

                    RedisUtility.Remove(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERGAME, gamer.openid, gamer.unionid));

                    if (!string.IsNullOrEmpty(userWinLose))
                    {
                        userWinLose += "|";
                    }
                    userWinLose += user.UserID + "," + jsddr.Scare;
                }
            }
            //牌局回放 翻鸡
            var gameOperationInfoFJ = GameOperationInfo.CreateBuilder().AddMJ(MaJiang.CreateBuilder().SetPaiHS(jp.HS).SetPaiID(0)).SetOperationType(9);

            StringBuilder logtxt = new StringBuilder();

            logtxt.Append("胡牌" + getdata.ToString());
            foreach (var item in mjlist)
            {
                item.SendData.Clear();
                logtxt.Append(string.Join(",", item.majiangs.Select(w => w.PaiHs)));
                UserInfo user         = Gongyong.userlist.Find(u => u.openid == item.Openid);
                var      sendData5021 = new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 5021, HType.Length, requestInfo.MessageNum, HType));
                item.SendData.Add(sendData5021);

                byte[] allsp = returnallmj.Build().ToByteArray();

                byte[] jpr = jp.Build().ToByteArray();
                //7005 返回翻鸡牌
                var sendData7005 = new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 7005, jpr.Length, requestInfo.MessageNum, jpr));
                item.SendData.Add(sendData7005);

                //7008 : 玩家手牌集合
                var sendData7008 = new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 7008, allsp.Length, requestInfo.MessageNum, allsp));
                item.SendData.Add(sendData7008);

                byte[] settlebyte = settle.Build().ToByteArray();
                r.gameOperationProcess.SetJieSuanInfo(ByteString.CopyFrom(settlebyte));
                //7009 : 返回结算信息(全体)
                var sendData = new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 7009, settlebyte.Length, requestInfo.MessageNum, settlebyte));
                item.SendData.Add(sendData);

                if (r.Dcount == r.count)
                {
                    byte[] senddjsbyte = senddjs.Build().ToByteArray();
                    //5014 : 大结算信息
                    var sendData5014 = new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 5014, senddjsbyte.Length, requestInfo.MessageNum, senddjsbyte));
                    item.SendData.Add(sendData5014);
                }
                foreach (var senddata in item.SendData)
                {
                    user.session.TrySend(senddata);
                }
            }
            session.Logger.Debug(logtxt);
            //牌局回放 胡牌
            var gameOperationInfo = GameOperationInfo.CreateBuilder()
                                    .SetSerialNumber(r.gameOperationProcess.GameOperationInfoCount)
                                    .SetOperationFW(huType.FWZ)
                                    .SetOperationType(5)
                                    .SetTingHuType(muuser.Is_tianHu ? 1 : 0)
                                    .SetPaoFW(huType.FWB);

            if (getdata.DXInfoCount > 1)
            {
                gameOperationInfo.AddRangeDXInfo(getdata.DXInfoList);
            }
            r.gameOperationProcess.AddGameOperationInfo(gameOperationInfo);
            gameOperationInfoFJ.SetSerialNumber(r.gameOperationProcess.GameOperationInfoCount).SetOperationFW(0);
            r.gameOperationProcess.AddGameOperationInfo(gameOperationInfoFJ);
            try
            {
                CardsLogic.AddboarddetailsTB(r);
            }
            catch (Exception ex)
            {
                session.Logger.Error(ex);
            }
            ///对局结束 清空所有信息
            if (r.Dcount == r.count)
            {
                Gongyong.mulist.RemoveAll(u => u.RoomID == r.RoomID);
                Gongyong.FKUser.RemoveAll(u => u.roomid == r.RoomID);
                Gongyong.roomlist.RemoveAll(u => u.RoomID == r.RoomID);
                RedisUtility.Remove(RedisUtility.GetKey(GameInformationBase.COMMUNITYROOMINFO, r.RoomID.ToString(), ""));
                new RoomInfoDAL().UpdateEndRoomInfoByRoomInfoID(new RoomInfo {
                    RoomInfoID = r.RoomInfoID, EndTime = DateTime.Now, EndStatus = 0, UserWinLose = userWinLose
                });
                foreach (var item in mjlist)
                {
                    UserInfo user = Gongyong.userlist.Find(u => u.openid == item.Openid);
                    new userRecordLOGDAL().Add(new userRecordlogLOG {
                        UserID = user.UserID, RoomInfoID = r.RoomInfoID, UserWinLose = userWinLose, EndTime = DateTime.Now, CreateDate = r.CreateDate, RoomID = r.RoomID
                    });
                }
                r.startgame = 0;
            }
            else
            {
                if (r != null)
                {
                    r.RoomPai   = new CreateMj().CreateMJ(r.IsYuanQue);
                    r.Dcount   += 1;
                    r.startgame = 2;
                }
            }
        }
コード例 #14
0
ファイル: LobbyInfo.cs プロジェクト: zhaoy615/Guizhoule
        public void ExecuteCommand(GameSession session, ProtobufRequestInfo requestInfo)
        {
            var sendLobbyInfo = SendLobbyInfo.ParseFrom(requestInfo.Body);

            DAL.DAL.RoomInfoDAL roomInfoDAL = new DAL.DAL.RoomInfoDAL();
            byte[] returnLobbyInfoData      = null;
            var    returnLobbyInfo          = ReturnLobbyInfo.CreateBuilder();
            //var roomInfo = RoomInfo.CreateBuilder();
            var roomIDList = roomInfoDAL.GetroomInfoByGroupID(sendLobbyInfo.GroupID);

            foreach (var item in roomIDList)
            {
                //获取房间信息
                RedisGameRoomInfo redisRoomInfo = RedisUtility.Get <RedisGameRoomInfo>(RedisUtility.GetKey(GameInformationBase.COMMUNITYROOMINFO, item.ToString(), item.ToString()));


                if (redisRoomInfo != null)
                {
                    var roomInfo = LobbyRoomInfo.CreateBuilder();
                    roomInfo.SetRoomID(redisRoomInfo.room.RoomID).SetCreateDate(TimeToLong.ConvertDateTimeInt(redisRoomInfo.room.CreateDate)).SetIsWgj(redisRoomInfo.room.is_wgj ? 1 : 0).SetIsXinqiji(redisRoomInfo.room.is_xinqiji ? 1 : 0)
                    .SetIsShangxiaji(redisRoomInfo.room.is_shangxiaji ? 1 : 0).SetIsBenji(redisRoomInfo.room.is_benji ? 1 : 0).SetIsYikousan(redisRoomInfo.room.is_yikousan ? 1 : 0).SetIsLianzhuang(redisRoomInfo.room.is_lianz ? 1 : 0)
                    .SetRoomPeo(redisRoomInfo.room.room_peo).SetCount(redisRoomInfo.room.count).SetQuickCard(redisRoomInfo.room.QuickCard ? 1 : 0).SetIsYuanQue(redisRoomInfo.room.IsYuanQue ? 1 : 0);



                    //获取房间里用户信息
                    foreach (var userOpenid in redisRoomInfo.room.listOpenid)
                    {
                        var player = Player.CreateBuilder();
                        RedisUserInfoModel user = RedisUtility.Get <RedisUserInfoModel>(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERINFO, userOpenid, string.Empty));
                        player.SetGroupUserID(user.UserID).SetNickName(HttpUtility.UrlDecode(HttpUtility.UrlDecode(user.Nickname))).SetPicture(user.Headimg);
                        roomInfo.AddPlayerList(player);
                    }
                    returnLobbyInfo.AddRoomListInfo(roomInfo);
                }
            }
            returnLobbyInfoData = returnLobbyInfo.Build().ToByteArray();
            session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1081, returnLobbyInfoData.Length, requestInfo.MessageNum, returnLobbyInfoData)));
        }
コード例 #15
0
        /// <summary>
        /// 解散牌桌
        /// </summary>
        /// <param name="roomId"></param>
        /// <param name="MessageNum"></param>
        public void DisbandTable(object state)
        {
            var countdownInfo = state as CountdownInfo;

            RoomClear r = Gongyong.roomclear.Find(u => u.RoomID == countdownInfo.roomID);

            if (r == null)
            {
                return;
            }
            ThreadUtility.RemoveManagedThreadByRoomID(countdownInfo.roomID);//取消托管
            List <mjuser> listmj      = Gongyong.mulist.FindAll(u => u.RoomID == countdownInfo.roomID);
            var           senddjs     = ReturnDJS.CreateBuilder();
            CardUser      card        = Gongyong.FKUser.Find(u => u.roomid == countdownInfo.roomID);
            string        userWinLose = string.Empty;

            foreach (var item in listmj)
            {
                UserInfo gamer = Gongyong.userlist.Find(u => u.openid == item.Openid);
                if (gamer == null)
                {
                    continue;
                }
                var users = Userinfo.CreateBuilder().SetHeadimg(gamer.headimg).SetNickname(gamer.nickname).SetOpenid(gamer.openid).SetSex(int.Parse(gamer.sex)).SetUserFW(item.ZS_Fw).SetUserBean(0).SetUserGold(0).SetUserID(gamer.UserID).Build();
                var jsddr = UserAJS.CreateBuilder();
                jsddr.SetUser(users);
                jsddr.SetZdou(item.zwd_count);
                jsddr.SetZimo(item.zm_count);
                jsddr.SetAndou(item.ad_count);
                jsddr.SetMdou(item.MD_count);
                jsddr.SetDianpao(item.dp_count);

                switch (item.ZS_Fw)
                {
                case 1:
                    jsddr.SetScare(card == null ? 0 : card.dong);
                    break;

                case 2:
                    jsddr.SetScare(card == null ? 0 : card.nan);
                    break;

                case 3:
                    jsddr.SetScare(card == null ? 0 : card.xi);
                    break;

                case 4:
                    jsddr.SetScare(card == null ? 0 : card.bei);
                    break;

                default:
                    break;
                }
                senddjs.AddUserjs(jsddr);
                senddjs.SetState(2);
                if (!string.IsNullOrEmpty(userWinLose))
                {
                    userWinLose += "|";
                }
                userWinLose += gamer.UserID + "," + jsddr.Scare;
            }
            senddjs.SetState(2);
            Gongyong.mulist.RemoveAll(u => u.RoomID == countdownInfo.roomID);
            var roomInfo = Gongyong.roomlist.Find(w => w.RoomID == countdownInfo.roomID);

            Gongyong.roomlist.RemoveAll(u => u.RoomID == countdownInfo.roomID);
            var alldata = ReturnAllIdea.CreateBuilder().SetState(1).SetMessgaeType(3).Build();

            byte[] bytesss  = alldata.ToByteArray();
            byte[] bsenddjs = senddjs.Build().ToByteArray();
            foreach (var item in listmj)
            {
                UserInfo user = Gongyong.userlist.Find(u => u.openid == item.Openid);
                if (user != null)
                {
                    user.session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 5007, bytesss.Length, countdownInfo.MessageNum, bytesss)));//yi
                    user.session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 5014, bsenddjs.Length, countdownInfo.MessageNum, bsenddjs)));
                    RedisUtility.Remove(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERGAME, user.openid, user.unionid));
                }
            }
            foreach (var item in Gongyong.msg.FindAll(w => w.RoomID == r.RoomID))
            {
                Gongyong.msg.Remove(item);
            }

            RedisUtility.Remove(RedisUtility.GetKey(GameInformationBase.COMMUNITYROOMINFO, r.RoomID.ToString(), ""));

            new RoomInfoDAL().UpdateEndRoomInfoByRoomInfoID(new RoomInfo {
                RoomInfoID = roomInfo.RoomInfoID, EndTime = DateTime.Now, EndStatus = 3, UserWinLose = userWinLose
            });
            foreach (var item in listmj)
            {
                UserInfo user = Gongyong.userlist.Find(u => u.openid == item.Openid);
                new userRecordLOGDAL().Add(new userRecordlogLOG {
                    UserID = user.UserID, RoomInfoID = roomInfo.RoomInfoID, UserWinLose = userWinLose, EndTime = DateTime.Now, CreateDate = roomInfo.CreateDate, RoomID = r.RoomID
                });
            }
        }
コード例 #16
0
        public void ExecuteCommand(GameSession session, ProtobufRequestInfo requestInfo)
        {
            var             userInfo = SendGetUserRecord.ParseFrom(requestInfo.Body);
            RedisLoginModel olduser  = RedisUtility.Get <RedisLoginModel>(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERLIST, userInfo.Openid, userInfo.Unionid));

            if (olduser == null)
            {
                return;
            }
            var list        = new userRecordLOGDAL().Get48hourInfoByUserID(userInfo.UserID, userInfo.HasGroupID? userInfo.GroupID:0);
            var userinfoDAL = new mjuserinfoDAL();

            var  returnUserRecord = ReturnUserRecord.CreateBuilder();
            long userid;

            foreach (var item in list)
            {
                var userRecord = UserRecord.CreateBuilder();
                userRecord.SetRoomInfoID(item.RoomInfoID);
                userRecord.SetCreateDate(TimeToLong.ConvertDateTimeInt(item.CreateDate));
                userRecord.SetEndTime(TimeToLong.ConvertDateTimeInt(item.EndTime));
                userRecord.SetUserID(item.CreateUserID);//需要显示房主标签
                userRecord.SetRoomMsg(
                    ReturnRoomMsg.CreateBuilder()
                    .SetCount(item.RoomNumber)
                    .SetIsBenji(item.IsBenJi)
                    .SetIsLianzhuang(item.CountPointsType == 3 ? 1 : 0)
                    .SetIsShangxiaji(item.IsSangXiaJi)
                    .SetIsWgj(item.IsWGJ)
                    .SetIsXinqiji(item.IsXinQiJi)
                    .SetIsYikousan(item.CountPointsType == 1 ? 1 : 0)
                    .SetIsYuanque(item.IsYuanQue)
                    .SetQuickCard(item.QuickCard)
                    .SetRoomPeo(item.RoomPeo)
                    );
                foreach (var userWinLose in item.UserWinLose.Split('|'))
                {
                    long     userID = 0;
                    string[] info   = userWinLose.Split(',');
                    if (long.TryParse(info[0], out userID))
                    {
                        if (userRecord.RecordUserInfoList.Any(w => w.UserID == userID))
                        {
                            var userInfoData = userRecord.RecordUserInfoList.First(w => w.UserID == userID);
                            userRecord.AddRecordUserInfo(RecordUserInfo.CreateBuilder()
                                                         .SetHeadimg(userInfoData.Headimg)
                                                         .SetNickname(HttpUtility.UrlDecode(HttpUtility.UrlDecode(userInfoData.Nickname)))
                                                         .SetOpenid(userInfoData.Openid)
                                                         .SetScore(info[1])
                                                         .SetSex(userInfoData.Sex)
                                                         .SetUserID(userInfoData.UserID));
                        }
                        else
                        {
                            var userInfoData = userinfoDAL.GetModel(userID);
                            userRecord.AddRecordUserInfo(RecordUserInfo.CreateBuilder()
                                                         .SetHeadimg(userInfoData.headimg)
                                                         .SetNickname(HttpUtility.UrlDecode(HttpUtility.UrlDecode(userInfoData.nickname)))
                                                         .SetOpenid(userInfoData.openid)
                                                         .SetScore(info[1])
                                                         .SetSex(userInfoData.sex.Value)
                                                         .SetUserID(userInfoData.id));
                        }
                    }
                }
                returnUserRecord.AddUserRecord(userRecord);
            }
            var data = returnUserRecord.Build().ToByteArray();

            session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 9002, data.Length, requestInfo.MessageNum, data)));
        }
コード例 #17
0
        public void ExecuteCommand(GameSession session, ProtobufRequestInfo requestInfo)
        {
            GroupInfoDAL groupInfoDAL = new GroupInfoDAL();


            var requestUsersManager = SendGroupUsersManager.ParseFrom(requestInfo.Body);
            // RedisUserInfoModel user = RedisUtility.Get<RedisUserInfoModel>(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERINFO, requestUsersManager.Openid, requestUsersManager.Unionid));
            var nowUser = Gongyong.userlist.First(w => w != null && w.unionid.Equals(requestUsersManager.Unionid));

            if (nowUser == null)
            {
                session.Logger.Debug("管理朋友圈用户 未登录!");
                return;
            }
            var player           = Player.CreateBuilder();
            var returnPlayerList = ReturnPlayerList.CreateBuilder();
            var list             = groupInfoDAL.GetUsersIDListByGroupID(requestUsersManager.GroupID);

            byte[] returnMessage = null;

            var groupInfo = groupInfoDAL.GetGroupInfoByGroupID(requestUsersManager.GroupID, nowUser.Type);

            if (nowUser.Type == 0)
            {
                if (groupInfo.CreateUserID != nowUser.UserID)
                {
                    session.Logger.Debug("管理朋友圈用户不是圈主!");
                    return;
                }
            }
            else if (nowUser.Type == 1)//龙宝用户
            {
                if (!groupInfo.CreateUserUnionID.Equals(nowUser.unionid))
                {
                    session.Logger.Debug("管理朋友圈用户不是圈主!");
                    return;
                }
            }
            //删除用户
            if (requestUsersManager.HasDelByUserID && !requestUsersManager.HasAddUsers)
            {
                if (groupInfo.CreateUserID == requestUsersManager.DelByUserID)
                {
                    returnMessage = ReturnMessgae.CreateBuilder().SetStatue(0).SetMessage("群主不能删除自己").Build().ToByteArray();
                    session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1104, returnMessage.Length, requestInfo.MessageNum, returnMessage)));
                    return;
                }
                else
                {
                    // groupInfoDAL.DelUsersByUserID(requestUsersManager.GroupID, requestUsersManager.DelByUserID);
                    groupInfoDAL.DelUsersByUserIDTransaction(requestUsersManager.GroupID, requestUsersManager.DelByUserID, 3, requestUsersManager.DelByUserID);


                    returnMessage = ReturnMessgae.CreateBuilder().SetStatue(0).SetMessage(string.Format("删除用户{0}成功", requestUsersManager.DelByUserID)).Build().ToByteArray();
                    session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1104, returnMessage.Length, requestInfo.MessageNum, returnMessage)));
                    return;
                }
            }
            //添加用户
            else if (!requestUsersManager.HasDelByUserID && requestUsersManager.HasAddUsers)
            {
                //加入类型,1圈主添加,2申请加入,3推荐加入
                // byte[] returnMessage = null;
                //var groupInfo = groupInfoDAL.GetGroupInfoByGroupID(requestUsersManager.GroupID);
                //if (groupInfo.CreateUserID == requestUsersManager.AddUsers)
                //{
                //    returnMessage = ReturnMessgae.CreateBuilder().SetStatue(0).SetMessage("添加失败").Build().ToByteArray();
                //    session.Send(new ArraySegment<byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1104, returnMessage.Length, requestInfo.MessageNum, returnMessage)));
                //    return;
                //}
                if (new DAL.DAL.mjuserinfoDAL().GetModel(requestUsersManager.AddUsers) != null)
                {
                    var err = groupInfoDAL.AddUserToGroup(requestUsersManager.GroupID, requestUsersManager.AddUsers, 1);

                    if (err == 0)
                    {
                        returnMessage = ReturnMessgae.CreateBuilder().SetStatue(0).SetMessage("添加失败,已存在该用户").Build().ToByteArray();
                        session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1104, returnMessage.Length, requestInfo.MessageNum, returnMessage)));
                    }
                    else
                    {
                        returnMessage = ReturnMessgae.CreateBuilder().SetStatue(1).SetMessage("添加成功").Build().ToByteArray();


                        //添加成狗后把用户丢到RedisUs  避免需重复登陆问题
                        RedisUserInfoModel user = RedisUtility.Get <RedisUserInfoModel>(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERINFO, requestUsersManager.AddUsers.ToString(), requestUsersManager.AddUsers.ToString()));
                        if (user != null)
                        {
                            user.GroupID.Add((int)requestUsersManager.GroupID);
                            RedisUtility.Set(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERINFO, user.Openid, user.Unionid), user);
                            var userInfo = Gongyong.userlist.Find(w => w.UserID == user.UserID);
                            if (userInfo != null)
                            {
                                userInfo.GroupID.Add((int)requestUsersManager.GroupID);
                            }
                        }

                        session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1104, returnMessage.Length, requestInfo.MessageNum, returnMessage)));
                    }
                }
                else
                {
                    returnMessage = ReturnMessgae.CreateBuilder().SetStatue(0).SetMessage("无此用户").Build().ToByteArray();
                    session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1104, returnMessage.Length, requestInfo.MessageNum, returnMessage)));
                    return;
                }
                return;
            }
            else if (requestUsersManager.HasCheckRecordByUserID)
            {
                var createRommRecord = CreateRommRecord.CreateBuilder();
                var returnRecordList = ReturnRecordList.CreateBuilder();
                var listRecord       = groupInfoDAL.GetCreateRoomRecord(requestUsersManager.CheckRecordByUserID, requestUsersManager.GroupID);
                foreach (var item in listRecord)
                {
                    createRommRecord.SetGroupID(item.GroupID).SetRoomID(item.RoomID).SetCreateUserID(item.CreateUserID).SetCreateDate(TimeToLong.ConvertDateTimeInt(item.CreateDate)).SetUseRoomCard(item.UseRoomCard);
                    returnRecordList.AddCreateRommRecordList(createRommRecord);
                }

                session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1052, returnRecordList.Build().ToByteArray().Length, requestInfo.MessageNum, returnRecordList.Build().ToByteArray())));
                // session.Close();
                return;
            }

            foreach (var userID in list)
            {
                DAL.Model.mjuserinfo userinfo = new DAL.DAL.mjuserinfoDAL().GetModel(userID);
                if (userinfo == null)
                {
                    groupInfoDAL.DelUsersByUserID(requestUsersManager.GroupID, userID);
                }
                else
                {
                    player.SetGroupUserID(userID).SetNickName(HttpUtility.UrlDecode(HttpUtility.UrlDecode(userinfo.nickname))).SetPicture(userinfo.headimg);
                    returnPlayerList.AddPlayerList(player);
                }
            }

            //返回待审核人数
            int counts = groupInfoDAL.GroupApplyRecord(requestUsersManager.GroupID).Count();

            returnPlayerList.SetApplyUsers(counts);
            var returnPlayerListData = returnPlayerList.Build().ToByteArray();

            session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1051, returnPlayerListData.Length, requestInfo.MessageNum, returnPlayerListData)));
        }
コード例 #18
0
ファイル: GameOperation.cs プロジェクト: zhaoy615/Guizhoule
        public void ExecuteCommand(GameSession session, ProtobufRequestInfo requestInfo)
        {
            var             gameOperation = SendGameOperation.ParseFrom(requestInfo.Body);
            RedisLoginModel olduser       = RedisUtility.Get <RedisLoginModel>(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERLIST, gameOperation.Openid, gameOperation.Unionid));

            if (olduser == null)
            {
                return;
            }
            int GroupID             = gameOperation.HasGroupID ? gameOperation.GroupID : 0;
            var serverGameOperation = ReturnGameOperation.CreateBuilder();

            UserInfo user = Gongyong.userlist.Find(u => u.openid == olduser.Openid);

            switch (gameOperation.Operation)
            {
            //1創建房間/2加入房間
            case 1:
                //if (ISUserInGruop(gameOperation))
                if (gameOperation.GroupID != 0)
                {
                    GroupInfoDAL groupInfoDAL      = new GroupInfoDAL();
                    var          creategroupuderid = groupInfoDAL.GetUserIDByGuoupID(GroupID);
                    var          roomcardCount     = RoomCardUtility.GetRoomCard(creategroupuderid);
                    if (roomcardCount - GameInformationBase.createRoomCard < 0)
                    {
                        var data = serverGameOperation.SetUnionid(gameOperation.Unionid).SetOpenid(gameOperation.Openid).SetStatus(-3).Build().ToByteArray();
                        session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1021, data.Length, requestInfo.MessageNum, data)));
                        return;
                    }
                    else
                    {
                        RedisUtility.GetServerIP(GameInformationBase.DEFAULTGAMESERVERNAME, requestInfo.MessageNum, session, 1, gameOperation.Openid, gameOperation.Unionid);
                    }


                    var reslut = RedisUtility.GetServerIP(GameInformationBase.DEFAULTGAMESERVERNAME, requestInfo.MessageNum, session, 1, gameOperation.Openid, gameOperation.Unionid);
                    if (reslut == true)
                    {
                        //根据groupid来查找所有在线的圈子session
                        var groupList = Gongyong.userlist.FindAll(w => { return(w.GroupID.Contains(GroupID) && w.session != session); });
                        for (var i = 0; i < groupList.Count; i++)
                        {
                            Console.WriteLine("get : " + groupList[i].nickname + " , ", groupList[i]);
                        }
                        ////向日志里面添加朋友圈耗卡信息
                        //GroupInfoDAL groupInfoDAL = new GroupInfoDAL();
                        //var userInfo = Gongyong.userlist.Find(w => { return w.session.Equals(session); });
                        //var listRecord = groupInfoDAL.AddCreateRoomRecord(userInfo.UserID, GroupID,);
                    }
                }
                else    //不是在圈子里进行创建房间的
                {
                    //检测是否满足开房的条件
                    var roomcardCount = RoomCardUtility.GetRoomCard(user.UserID);
                    if (roomcardCount - GameInformationBase.createRoomCard < 0)
                    {
                        var data = serverGameOperation.SetUnionid(gameOperation.Unionid).SetOpenid(gameOperation.Openid).SetStatus(-1).Build().ToByteArray();
                        session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1021, data.Length, requestInfo.MessageNum, data)));
                        return;
                    }
                    else
                    {
                        RedisUtility.GetServerIP(GameInformationBase.DEFAULTGAMESERVERNAME, requestInfo.MessageNum, session, 1, gameOperation.Openid, gameOperation.Unionid);
                    }
                }
                break;

            case 2:
                if (!gameOperation.HasRoomID)
                {
                    return;
                }
                var roomInfo    = RedisUtility.Get <RedisGameRoomInfo>(RedisUtility.GetKey(GameInformationBase.COMMUNITYROOMINFO, gameOperation.RoomID, string.Empty));
                var ddzRoomInfo = RedisUtility.Get <RedisDDZGameRoomInfo>(RedisUtility.GetKey(GameInformationBase.COMMUNITYDDZROOMINFO, gameOperation.RoomID, string.Empty));
                var status      = 0;

                if (roomInfo == null && ddzRoomInfo == null)
                {
                    status = 3;
                }
                else if ((roomInfo != null && roomInfo.room.listOpenid.Count >= roomInfo.room.room_peo) || (ddzRoomInfo != null && ddzRoomInfo.room.listOpenid.Count >= 3))
                {
                    status = 2;
                }
                else
                {
                    if (ISUserInGruop(gameOperation))
                    {
                        status = 1;    //1:加入成功
                        RedisUtility.GetServerIP(roomInfo.ServerName, requestInfo.MessageNum, session, 1, gameOperation.Openid, gameOperation.Unionid, false, 0, status, roomInfo == null ? 1 : 0);
                    }
                    else    //不是圈内成员
                    {
                        var data = serverGameOperation.SetUnionid(gameOperation.Unionid).SetOpenid(gameOperation.Openid).SetStatus(-2).Build().ToByteArray();
                        session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1021, data.Length, requestInfo.MessageNum, data)));
                    }
                }
                if (status != 1)
                {
                    var data = ReturnRoomAdd.CreateBuilder().SetStart(status).Build().ToByteArray();
                    session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 7090, data.Length, requestInfo.MessageNum, data)));
                }
                break;
            }
        }
コード例 #19
0
ファイル: Login.cs プロジェクト: zhaoy615/Guizhoule
        /// <summary>
        /// 新用户登录信息保存
        /// </summary>
        /// <param name="userinfo"></param>
        /// <param name="usermodel"></param>
        /// <param name="session"></param>
        /// <param name="clientipe"></param>
        /// <param name="serverName"></param>
        /// <param name="requestInfo"></param>
        private void NewUserLogin(SendLogin userinfo, mjuserinfo usermodel, GameSession session, IPEndPoint clientipe, string serverName, ProtobufRequestInfo requestInfo)
        {
            UserInfo user = new UserInfo()
            {
                city = userinfo.City,
                //判断图片是否保存至图片服务器,保存相应头像地址
                headimg  = usermodel.headimg,
                nickname = userinfo.Nickname,
                openid   = userinfo.Openid,
                province = userinfo.Province,
                session  = session,
                sex      = userinfo.Sex,
                unionid  = userinfo.Unionid,
                Lat      = userinfo.Latitude,
                UserID   = usermodel.id,
                UserIP   = clientipe.Address.ToString(),
                GroupID  = groupStaffInfoDAL.GetGroupIDByUserID(usermodel.id).ToList(),
                Type     = UserType,
                ConnTime = DateTime.Now
            };
            var redisUserInfo = RedisUtility.Get <RedisGameModel>(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERGAME, userinfo.Openid, userinfo.Unionid));
            //user.GroupID.AddRange(groupInfoDAL.GetGroupIDByUserID(usermodel.id));//因为圈主 不存在圈子成员表中, 所以需要单独再添加一次
            // UserClient userClient = new UserClient();
            // userClient.UpdateUserInfo(new registrationactivitiesModel { GameUserID = user.UserID.ToString(), HeadImgurl = user.headimg, UnionID = user.unionid, LastTime = DateTime.Now, NickName = user.nickname });
            //var resultData = JsonConvert.DeserializeObject <ResultData> (userClient.GetGameCurrency(user.unionid)).Data;
            long roomCard = roomCard = UserType == 1 ? UserLongBao : RoomCardUtility.GetRoomCard(user.UserID);

            // long.TryParse(resultData == null ?"0":resultData.ToString(), out roomCard); //resultData==null?"0": resultData.ToString()//userClient.GetGameCurrencyList(user.unionid)//resultData ? Convert.ToInt64(resultData.Data) : 0;

            Gongyong.userlist.Add(user);
            RedisUtility.Set(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERLIST, userinfo.Openid, userinfo.Unionid), new RedisLoginModel {
                Openid = userinfo.Openid, ServerName = serverName, Unionid = userinfo.Unionid
            });
            RedisUtility.Set(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERINFO, userinfo.Openid, userinfo.Unionid), new RedisUserInfoModel(user));

            var A = RedisUtility.Get <RedisLoginModel>(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERLIST, userinfo.Openid, userinfo.Unionid));


            var log = ReturnLogin.CreateBuilder().SetLoginstat(1).SetUserID(int.Parse(usermodel.id.ToString())).SetUserRoomCard(roomCard);

            if (!string.IsNullOrEmpty(CerStr))
            {
                log.SetCertificate(CerStr);//返回证书
                log.SetUnionid(user.unionid);
                log.SetHeadimg(user.headimg);
                log.SetUserName(user.nickname);
            }
            byte[] msg      = log.Build().ToByteArray();
            bool   isSendCL = false;

            if (redisUserInfo != null && redisUserInfo.RoomID != 0)
            {
                //SendCL(session, userinfo.Openid, requestInfo);
                isSendCL = RedisUtility.GetServerIP(redisUserInfo.ServerName, requestInfo.MessageNum, session, 2, userinfo.Openid, userinfo.Unionid, true, redisUserInfo.RoomID);//2为有未结束的游戏
            }
            // if (!isSendCL)
            session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1002, msg.Length, requestInfo.MessageNum, msg)));
            var list = new AnnouncementDAL().GetAnnouncement();//获取公告列表
            var returnAnnouncement = ReturnAnnouncement.CreateBuilder();

            foreach (var item in list)
            {
                returnAnnouncement.AddAnnouncement(AnnouncementInfo.CreateBuilder().SetTitle(item.Title).SetContent(item.Content).Build());
            }
            var data = returnAnnouncement.Build().ToByteArray();

            session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 8001, data.Length, requestInfo.MessageNum, data)));
            session.Logger.Debug("登录游戏成功----------" + DateTime.Now);
        }
コード例 #20
0
        public void ExecuteCommand(GameSession session, ProtobufRequestInfo requestInfo)
        {
            GroupInfoDAL       groupInfoDAL    = new GroupInfoDAL();
            var                sendApplyToJoin = SendApplyToJoin.ParseFrom(requestInfo.Body);
            RedisUserInfoModel user            = RedisUtility.Get <RedisUserInfoModel>(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERINFO, sendApplyToJoin.Openid, sendApplyToJoin.Unionid));

            if (groupInfoDAL.GetGroupInfoByGroupID(sendApplyToJoin.GroupID, user.Type) == null)
            {
                var returnApplyToJoin = ReturnApplyToJoin.CreateBuilder().SetStatus(0).SetMessage("圈子不存在").Build().ToByteArray();
                session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1041, returnApplyToJoin.Length, requestInfo.MessageNum, returnApplyToJoin)));
            }
            else if (groupInfoDAL.PlayerApplyRecord(user.UserID, sendApplyToJoin.GroupID, 0) == 1)
            {
                var returnApplyToJoin = ReturnApplyToJoin.CreateBuilder().SetStatus(0).SetMessage("已申请,待群主通过").Build().ToByteArray();
                session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1041, returnApplyToJoin.Length, requestInfo.MessageNum, returnApplyToJoin)));
            }
            else if (groupInfoDAL.PlayerApplyRecord(user.UserID, sendApplyToJoin.GroupID, 1) == 1 || groupInfoDAL.IsUserInGroup(sendApplyToJoin.GroupID, user.UserID) != 0)
            {
                var returnApplyToJoin = ReturnApplyToJoin.CreateBuilder().SetStatus(0).SetMessage("已再圈子中,请勿重复申请").Build().ToByteArray();
                session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1041, returnApplyToJoin.Length, requestInfo.MessageNum, returnApplyToJoin)));
            }
            //else if (true)
            //{
            //    var returnApplyToJoin = ReturnApplyToJoin.CreateBuilder().SetStatus(0).SetMessage("已再圈子中,请勿重复申请").Build().ToByteArray();
            //    session.Send(new ArraySegment<byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1041, returnApplyToJoin.Length, requestInfo.MessageNum, returnApplyToJoin)));
            //}
            else
            {
                groupInfoDAL.ApplyToJoin(sendApplyToJoin.GroupID, user.UserID);
                var returnApplyToJoin = ReturnApplyToJoin.CreateBuilder().SetStatus(1).SetMessage("申请成功").Build().ToByteArray();
                session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1041, returnApplyToJoin.Length, requestInfo.MessageNum, returnApplyToJoin)));
            }
        }
コード例 #21
0
ファイル: AddRoomOne.cs プロジェクト: zhaoy615/Guizhoule
        /// <summary>
        /// 加入房间判断,先加入房间
        /// </summary>
        /// <param name="session"></param>
        /// <param name="requestInfo"></param>
        public void ExecuteCommand(GameSession session, ProtobufRequestInfo requestInfo)
        {
            if (!Gongyong.userlist.Any(w => w.session.SessionID.Equals(session.SessionID)))
            {
                session.Logger.Debug("AddRoomOne : 非法连接");
                session.Close();
                return;
            }
            var      getdata  = SendAddRoomOne.ParseFrom(requestInfo.Body);
            var      senddata = ReturnRoomAdd.CreateBuilder();
            UserInfo user     = Gongyong.userlist.Find(u => u.openid == getdata.Openid);

            if (user == null)
            {
                return;
            }
            Room r = Gongyong.roomlist.Find(u => u.RoomID == getdata.RoomID);

            session.Logger.Debug("申请加入房间" + getdata.Openid);

            if (r == null)
            {
                senddata.SetStart(3);//3:房间不存在
            }
            //else if (r.listOpenid.Any(w => w.Equals(getdata.Openid)))
            //{
            //    senddata.SetStart(1);//1:加入成功 如果本来就在房间内则不占一个位置
            //}
            else if (r.listOpenid.Count + 1 == r.room_peo)
            {
                senddata.SetStart(2);//2:人数已满
            }
            else
            {
                senddata.SetStart(1);//1:加入成功
                r.listOpenid.Add(getdata.Openid);

                try
                {
                    //将牌桌信息保存
                    RedisUtility.Set <RedisGameModel>(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERGAME, user.openid, user.unionid),
                                                      new RedisGameModel {
                        RoomID = r.RoomID, ServerName = GameInformationBase.serverName, Openid = user.openid, Unionid = user.unionid
                    });
                }
                catch (Exception ex)//用户加入房间时有可能redis 异常导致服务器内加入成功但是消息并未发送。
                {
                    session.Logger.Error(ex);
                    r.listOpenid.Remove(getdata.Openid);
                    return;
                }
                //session.Logger.Debug(getdata.Openid + " start : " + senddata.Start);
                //byte[] arr = senddata.Build().ToByteArray();

                //session.TrySend(new ArraySegment<byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 7090, arr.Length, requestInfo.MessageNum, arr)));
            }
            session.Logger.Debug(getdata.Openid + " start : " + senddata.Start);
            byte[] arr = senddata.Build().ToByteArray();

            session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 7090, arr.Length, requestInfo.MessageNum, arr)));
        }
コード例 #22
0
        public void ExecuteCommand(GameSession session, ProtobufRequestInfo requestInfo)
        {
            if (!Gongyong.userlist.Any(w => w.session.SessionID.Equals(session.SessionID)))
            {
                session.Logger.Debug("RemoveRoom : 非法连接");
                session.Close();
                return;
            }
            var    getdata = SendJS.ParseFrom(requestInfo.Body);
            mjuser rst     = Gongyong.mulist.Find(u => u.Openid == getdata.Openid);
            int    roomid  = getdata.Roomid;
            Room   r       = Gongyong.roomlist.Find(u => u.RoomID == roomid);

            if (rst == null)
            {
                if (r != null)
                {
                    if (!Gongyong.mulist.Any(w => w.RoomID == roomid))
                    {
                        Gongyong.roomlist.Remove(r);
                        RedisUtility.Remove(RedisUtility.GetKey(GameInformationBase.COMMUNITYROOMINFO, r.RoomID.ToString(), ""));
                    }
                }
                RedisUtility.Remove(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERGAME, getdata.Openid, getdata.Unionid));
                return;
            }
            if (r == null)
            {
                return;
            }

            int fw = Gongyong.mulist.Find(u => u.Openid == getdata.Openid).ZS_Fw;

            session.Logger.Debug(Name + "|" + getdata.ToString());
            string        nickname          = Gongyong.userlist.Find(u => u.openid == getdata.Openid).nickname;
            var           disbandedRoomInfo = RedisUtility.Get <DisbandedRoomInfo>((RedisUtility.GetKey(GameInformationBase.COMMUNITYDISBANDED, getdata.Openid, getdata.Unionid)));
            List <mjuser> listuser          = Gongyong.mulist.FindAll(u => u.RoomID == roomid);

            ///判断游戏是否开始(未开始直接解散,开始则发送消息)
            if (r.startgame != 1 && rst.IsHomeowner)
            {
                new UserExitLogic().DissolutionRoom(r, requestInfo.MessageNum, 1);
            }
            else if (disbandedRoomInfo != null && (DateTime.Now - disbandedRoomInfo.Time).TotalSeconds < 5)//
            {
                var data = ReturnDisbandedFailure.CreateBuilder().SetStatus(1).Build().ToByteArray();
                session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 5010, data.Length, requestInfo.MessageNum, data)));
            }
            else
            {
                if (disbandedRoomInfo == null)
                {
                    var disbandedRoom = new DisbandedRoomInfo {
                        OpenID = getdata.Openid, RoomID = roomid, Time = DateTime.Now
                    };
                    RedisUtility.Set(RedisUtility.GetKey(GameInformationBase.COMMUNITYDISBANDED, getdata.Openid, getdata.Unionid), disbandedRoom, 1);
                }
                if (!Gongyong.roomclear.Any(w => w.RoomID == roomid))
                {
                    RoomClear rc = new RoomClear()
                    {
                        Status = 1,
                        RoomID = roomid
                    };
                    var    Rdata  = ReturnJSMsg.CreateBuilder().SetFw(fw).SetNickName(nickname);
                    byte[] Rtbyte = Rdata.Build().ToByteArray();
                    foreach (var item in listuser)
                    {
                        if (item.Openid != getdata.Openid)
                        {
                            rc.RoomPeo.Add(item.Openid);
                        }
                        UserInfo user = Gongyong.userlist.Find(u => u.openid == item.Openid);
                        user.session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 5004, Rtbyte.Length, requestInfo.MessageNum, Rtbyte)));
                    }

                    Gongyong.roomclear.Add(rc);
                    ThreadUtility.AddCountdownRemoveRoomThread(roomid.ToString());//当有用户申请解散房间,倒计时开始。
                }
                else
                {
                    var data = SendJSIdea.CreateBuilder().SetOpenid(getdata.Openid).SetRoomid(roomid).SetState(1).Build().ToByteArray();
                    //  new ArraySegment<byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 5005, data.Length, requestInfo.MessageNum, data));
                    new ClearByUser().ExecuteCommand(session,
                                                     new ProtobufRequestInfo {
                        Body = data, Key = (GameInformationBase.BASEAGREEMENTNUMBER + 5005).ToString(), Messagelength = data.Length, MessageNum = GameInformationBase.BASEAGREEMENTNUMBER + 5005, MessageResNum = 0
                    });
                }
                //  ThreadUtility.StartCountdownRemoveRoomThread(roomid.ToString());
            }
        }
コード例 #23
0
        public void ExecuteCommand(GameSession session, ProtobufRequestInfo requestInfo)
        {
            var sendChangeApplyStatus = SendChangeApplyStatus.ParseFrom(requestInfo.Body);

            GroupInfoDAL groupInfoDAL = new GroupInfoDAL();

            byte[] resultData = null;
            DAL.DAL.mjuserinfoDAL mjuserinfo = new mjuserinfoDAL();
            if (sendChangeApplyStatus.ApplyStatus == 1 || sendChangeApplyStatus.ApplyStatus == 2)
            {
                var userinfo = mjuserinfo.GetModel(sendChangeApplyStatus.UserID);
                if (userinfo != null)
                {//=========================================================
                    if (groupInfoDAL.GetIsExistenceApplyStatus(sendChangeApplyStatus.GroupID, sendChangeApplyStatus.UserID, 0) == 1)
                    {
                        if (groupInfoDAL.AgreeApplyStatus(sendChangeApplyStatus.GroupID, sendChangeApplyStatus.UserID, sendChangeApplyStatus.ApplyStatus, 0) != 0)
                        {
                            if (sendChangeApplyStatus.ApplyStatus == 1)
                            {
                                groupInfoDAL.AddUserToGroup(sendChangeApplyStatus.GroupID, sendChangeApplyStatus.UserID, 2);
                                RedisUserInfoModel user = RedisUtility.Get <RedisUserInfoModel>(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERINFO, userinfo.openid, userinfo.unionid));
                                if (user != null)
                                {
                                    user.GroupID.Add((int)sendChangeApplyStatus.GroupID);
                                    RedisUtility.Set(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERINFO, user.Openid, user.Unionid), user);
                                    var userInfo = Gongyong.userlist.Find(w => w.UserID == user.UserID);
                                    if (userInfo != null)
                                    {
                                        userInfo.GroupID.Add((int)sendChangeApplyStatus.GroupID);
                                    }
                                }
                                resultData = ReturnChangeApplyStatus.CreateBuilder().SetStatus(1).SetMessage("修改成功").Build().ToByteArray();
                                session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1071, resultData.Length, requestInfo.MessageNum, resultData)));
                            }
                        }
                    }
                    resultData = ReturnChangeApplyStatus.CreateBuilder().SetStatus(1).SetMessage("修改失败").Build().ToByteArray();
                    session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1071, resultData.Length, requestInfo.MessageNum, resultData)));
                }
            }
            else if (sendChangeApplyStatus.ApplyStatus == 5 || sendChangeApplyStatus.ApplyStatus == 6)
            {
                var userinfo = mjuserinfo.GetModel(sendChangeApplyStatus.UserID);
                if (userinfo != null)
                {
                    if (groupInfoDAL.GetIsExistenceApplyStatus(sendChangeApplyStatus.GroupID, sendChangeApplyStatus.UserID, 4) == 1)
                    {
                        if (groupInfoDAL.AgreeApplyStatus(sendChangeApplyStatus.GroupID, sendChangeApplyStatus.UserID, sendChangeApplyStatus.ApplyStatus) != 0)
                        {
                            if (sendChangeApplyStatus.ApplyStatus == 5)
                            {
                                groupInfoDAL.DelUsersByUserIDTransaction(sendChangeApplyStatus.GroupID, sendChangeApplyStatus.UserID, 5);
                                RedisUserInfoModel user = RedisUtility.Get <RedisUserInfoModel>(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERINFO, userinfo.openid, userinfo.unionid));
                                if (user != null)
                                {
                                    user.GroupID.Remove((int)sendChangeApplyStatus.GroupID);
                                    RedisUtility.Set(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERINFO, user.Openid, user.Unionid), user);
                                    var userInfo = Gongyong.userlist.Find(w => w.UserID == user.UserID);
                                    if (userInfo != null)
                                    {
                                        userInfo.GroupID.Remove((int)sendChangeApplyStatus.GroupID);
                                    }
                                }
                                resultData = ReturnChangeApplyStatus.CreateBuilder().SetStatus(1).SetMessage("修改成功").Build().ToByteArray();
                                session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1071, resultData.Length, requestInfo.MessageNum, resultData)));
                            }
                        }
                    }
                }
            }
        }
コード例 #24
0
ファイル: Login.cs プロジェクト: zhaoy615/Guizhoule
        public void ExecuteCommand(GameSession session, ProtobufRequestInfo requestInfo)
        {
            IPEndPoint clientipe = session.RemoteEndPoint;

            session.Logger.Debug("登陆sssionID--------" + session.SessionID);

            string fileName = string.Empty; //文件名
            string headImg  = string.Empty; //头像图片

            session.Logger.Debug("登录游戏----------" + DateTime.Now);
            var        userinfo  = SendLogin.ParseFrom(requestInfo.Body);
            mjuserinfo usermodel = new mjuserinfo();

            mjuserinfo model = new mjuserinfo()
            {
                nickname   = userinfo.Nickname,
                openid     = userinfo.Openid,
                city       = userinfo.City,
                headimg    = userinfo.Headimg,
                province   = userinfo.Province,
                unionid    = userinfo.Unionid,
                sex        = int.Parse(userinfo.Sex),
                Oldheadimg = userinfo.Headimg,
                is_band    = UserType
            };

            usermodel = AddUser(model, session);
            session.Logger.Debug("登录用户openid:" + userinfo.Openid + "|昵称:" + userinfo.Nickname + "----------" + DateTime.Now);
            // UserInfo olduser = Gongyong.userlist.Find(u => u.openid == userinfo.Openid);

            RedisLoginModel olduser = RedisUtility.Get <RedisLoginModel>(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERLIST, userinfo.Openid, userinfo.Unionid));

            if (olduser == null)
            {
                NewUserLogin(userinfo, usermodel, session, clientipe, GameInformationBase.serverName, requestInfo);
            }
            else if (olduser.ServerName.Equals(GameInformationBase.serverName))
            {
                UserInfo userInfo = Gongyong.userlist.Find(u => u.openid == userinfo.Openid);

                // 可能会存在缓存服务器有用户信息,而服务器没有的情况。因此需要再次判断
                if (userInfo == null)
                {
                    NewUserLogin(userinfo, usermodel, session, clientipe, GameInformationBase.serverName, requestInfo);
                    session.Logger.Debug("新登录用户openid:" + userinfo.Openid);
                }
                else if (userInfo.session.Connected)
                {
                    ReturnLogin log = ReturnLogin.CreateBuilder().SetLoginstat(2).SetUserID(int.Parse(usermodel.id.ToString())).SetUserRoomCard(0).Build();
                    byte[]      msg = log.ToByteArray();

                    session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1002, msg.Length, requestInfo.MessageNum, msg)));

                    session.Logger.Debug("登录游戏失败,当前对象存在----------" + DateTime.Now);
                    session.Logger.Debug("sssionID--------" + session.SessionID);
                }
                else
                {
                    session.Logger.Debug("登录游戏成功,当前对象存在----------" + DateTime.Now);
                    var redisUserInfo = RedisUtility.Get <RedisGameModel>(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERGAME, userinfo.Openid, userinfo.Unionid));
                    // UserInfo user = Gongyong.userlist.Find(u => u.openid == userinfo.Openid);
                    userInfo.city = userinfo.City;

                    //判断图片是否保存至图片服务器,保存相应头像地址
                    userInfo.headimg  = usermodel.headimg;
                    userInfo.nickname = userinfo.Nickname;
                    userInfo.openid   = userinfo.Openid;
                    userInfo.province = userinfo.Province;
                    userInfo.session  = session;
                    userInfo.sex      = userinfo.Sex;
                    userInfo.unionid  = userinfo.Unionid;
                    userInfo.Lat      = userinfo.Latitude;
                    userInfo.UserID   = long.Parse(usermodel.id.ToString());
                    userInfo.UserIP   = clientipe.Address.ToString();
                    userInfo.GroupID  = groupStaffInfoDAL.GetGroupIDByUserID(usermodel.id).ToList();
                    userInfo.Type     = UserType;
                    //userInfo.GroupID.AddRange(groupInfoDAL.GetGroupIDByUserID(usermodel.id));//因为圈主 不存在圈子成员表中, 所以需要单独再添加一次
                    RedisUtility.Set(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERINFO, userinfo.Openid, userinfo.Unionid), new RedisUserInfoModel(userInfo));
                    // mjuser mju = Gongyong.mulist.Find(u => u.Openid == userinfo.Openid);
                    bool isSendCL = false;
                    if (redisUserInfo != null && redisUserInfo.RoomID != 0)
                    {
                        //SendCL(session, userinfo.Openid, requestInfo);
                        isSendCL = RedisUtility.GetServerIP(redisUserInfo.ServerName, requestInfo.MessageNum, session, 2, userinfo.Openid, userinfo.Unionid, true, redisUserInfo.RoomID);//2为有未结束的游戏
                    }
                    //UserClient userClient = new UserClient();
                    //userClient.UpdateUserInfo(new registrationactivitiesModel { GameUserID = userInfo.UserID.ToString(), HeadImgurl = userInfo.headimg, UnionID = userInfo.unionid, LastTime = DateTime.Now, NickName = userInfo.nickname });
                    //var resultData = JsonConvert.DeserializeObject<ResultData>(userClient.GetGameCurrency(userInfo.unionid)).Data;
                    long roomCard = 0;
                    roomCard = UserType == 1 ? UserLongBao : RoomCardUtility.GetRoomCard(userInfo.UserID);

                    //long.TryParse(resultData == null ? "0" : resultData.ToString(), out roomCard);
                    userInfo.session = session;
                    var log = ReturnLogin.CreateBuilder().SetLoginstat(1).SetUserID(int.Parse(usermodel.id.ToString())).SetUserRoomCard(roomCard);
                    if (!string.IsNullOrEmpty(CerStr))
                    {
                        log.SetCertificate(CerStr);//返回证书
                        log.SetUnionid(userInfo.unionid);
                        log.SetHeadimg(userInfo.headimg);
                        log.SetUserName(userInfo.nickname);
                    }
                    byte[] msg = log.Build().ToByteArray();
                    // if(!isSendCL)
                    session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1002, msg.Length, requestInfo.MessageNum, msg)));

                    var list = new AnnouncementDAL().GetAnnouncement();//获取公告列表
                    var returnAnnouncement = ReturnAnnouncement.CreateBuilder();
                    foreach (var item in list)
                    {
                        returnAnnouncement.AddAnnouncement(AnnouncementInfo.CreateBuilder().SetTitle(item.Title).SetContent(item.Content).Build());
                    }
                    var dataInfo = returnAnnouncement.Build().ToByteArray();
                    session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 8001, dataInfo.Length, requestInfo.MessageNum, dataInfo)));
                    session.Logger.Debug("登录游戏成功,当前对象存在----------" + DateTime.Now);
                }
            }
            else//如果用户登录的服务器不是当前服务器,则返回登录的服务器IP和端口
            {
                UserInfo userInfo = Gongyong.userlist.Find(u => u.openid == userinfo.Openid);
                var      log      = ReturnLogin.CreateBuilder().SetLoginstat(1).SetUserID(int.Parse(usermodel.id.ToString())).SetUserRoomCard(0);
                if (!string.IsNullOrEmpty(CerStr))
                {
                    log.SetCertificate(CerStr);//返回证书
                    log.SetUnionid(userInfo.unionid);
                    log.SetHeadimg(userInfo.headimg);
                    log.SetUserName(userInfo.nickname);
                }
                byte[] msg = log.Build().ToByteArray();
                session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1002, msg.Length, requestInfo.MessageNum, msg)));
                RedisUtility.GetServerIP(olduser.ServerName, requestInfo.MessageNum, session, 1, userinfo.Openid, userinfo.Unionid);//2为有未结束的游戏
                session.Logger.Debug("有未结束的游戏");
            }
        }
コード例 #25
0
        public void ExecuteCommand(GameSession session, ProtobufRequestInfo requestInfo)
        {
            GroupInfoDAL groupInfoDAL = new GroupInfoDAL();


            var groupUsersManager = SendAgentGroupUsersManager.ParseFrom(requestInfo.Body);
            // RedisUserInfoModel user = RedisUtility.Get<RedisUserInfoModel>(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERINFO,  groupUsersManager.Openid,  groupUsersManager.Unionid));

            var player           = Player.CreateBuilder();
            var returnPlayerList = ReturnPlayerList.CreateBuilder();
            var list             = groupInfoDAL.GetUsersIDListByGroupID(groupUsersManager.GroupID);
            var deluserInfo      = new mjuserinfoDAL().GetModel(groupUsersManager.DelByUserID);

            byte[] returnMessage = null;
            if (deluserInfo == null)
            {
                returnMessage = ReturnMessgae.CreateBuilder().SetStatue(0).SetMessage("没有该用户").Build().ToByteArray();
                session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1104, returnMessage.Length, requestInfo.MessageNum, returnMessage)));
                // session.Close();
                return;
            }
            var groupInfo = groupInfoDAL.GetGroupInfoByGroupID(groupUsersManager.GroupID, deluserInfo.is_band.Value);

            if (groupInfo == null)
            {
                returnMessage = ReturnMessgae.CreateBuilder().SetStatue(0).SetMessage("没有该用户").Build().ToByteArray();
                session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1104, returnMessage.Length, requestInfo.MessageNum, returnMessage)));
                // session.Close();
                return;
            }
            //删除用户
            if (groupUsersManager.HasDelByUserID && !groupUsersManager.HasAddUsers)
            {
                if (groupInfo.CreateUserID == groupUsersManager.DelByUserID)
                {
                    returnMessage = ReturnMessgae.CreateBuilder().SetStatue(0).SetMessage("群主不能删除自己").Build().ToByteArray();
                    session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1104, returnMessage.Length, requestInfo.MessageNum, returnMessage)));
                    return;
                }

                // groupInfoDAL.DelUsersByUserIDTransaction( groupUsersManager.GroupID,  groupUsersManager.DelByUserID);
                groupInfoDAL.DelUsersByUserIDTransaction(groupUsersManager.GroupID, groupUsersManager.DelByUserID, 3, groupUsersManager.DelByUserID);
                returnMessage = ReturnMessgae.CreateBuilder().SetStatue(1).SetMessage("删除成功").Build().ToByteArray();
                session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1104, returnMessage.Length, requestInfo.MessageNum, returnMessage)));
                return;
            }
            //添加用户
            else if (!groupUsersManager.HasDelByUserID && groupUsersManager.HasAddUsers)
            {
                //var groupInfo = groupInfoDAL.GetGroupInfoByGroupID(groupUsersManager.GroupID);
                //if (groupInfo.CreateUserID == groupUsersManager.AddUsers)
                //{
                //    returnMessage = ReturnMessgae.CreateBuilder().SetStatue(0).SetMessage("添加失败").Build().ToByteArray();
                //    session.Send(new ArraySegment<byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1104, returnMessage.Length, requestInfo.MessageNum, returnMessage)));
                //    return;
                //}
                if (new DAL.DAL.mjuserinfoDAL().GetModel(groupUsersManager.AddUsers) != null)
                {
                    //加入类型,1圈主添加,2申请加入,3推荐加入
                    var err = groupInfoDAL.AddUserToGroup(groupUsersManager.GroupID, groupUsersManager.AddUsers, 1);
                    if (err == 0)
                    {
                        returnMessage = ReturnMessgae.CreateBuilder().SetStatue(0).SetMessage("添加失败,已存在该用户").Build().ToByteArray();
                        session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1104, returnMessage.Length, requestInfo.MessageNum, returnMessage)));
                    }
                    else
                    {
                        returnMessage = ReturnMessgae.CreateBuilder().SetStatue(1).SetMessage("添加成功").Build().ToByteArray();
                        groupInfoDAL.AddGroupTips(groupUsersManager.GroupID, groupUsersManager.AddUsers, 1);

                        //添加成狗后把用户丢到RedisUs  避免需重复登陆问题
                        RedisUserInfoModel user = RedisUtility.Get <RedisUserInfoModel>(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERINFO, groupUsersManager.AddUsers.ToString(), groupUsersManager.AddUsers.ToString()));
                        if (user != null)
                        {
                            user.GroupID.Add((int)groupUsersManager.GroupID);
                            RedisUtility.Set(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERINFO, user.Openid, user.Unionid), user);
                            var userInfo = Gongyong.userlist.Find(w => w.UserID == user.UserID);
                            if (userInfo != null)
                            {
                                userInfo.GroupID.Add((int)groupUsersManager.GroupID);
                            }
                        }

                        session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1104, returnMessage.Length, requestInfo.MessageNum, returnMessage)));
                    }
                }
                else
                {
                    returnMessage = ReturnMessgae.CreateBuilder().SetStatue(0).SetMessage("无此用户").Build().ToByteArray();
                    session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1104, returnMessage.Length, requestInfo.MessageNum, returnMessage)));
                    return;
                }
                return;
            }


            foreach (var userID in list)
            {
                DAL.Model.mjuserinfo userinfo = new DAL.DAL.mjuserinfoDAL().GetModel(userID);
                if (userinfo == null)
                {
                    groupInfoDAL.DelUsersByUserID(groupUsersManager.GroupID, userID);
                }
                else
                {
                    player.SetGroupUserID(userID).SetNickName(HttpUtility.UrlDecode(HttpUtility.UrlDecode(userinfo.nickname))).SetPicture(userinfo.headimg);
                    returnPlayerList.AddPlayerList(player);
                }
            }

            //返回待审核人数
            int counts = groupInfoDAL.GroupApplyRecord(groupUsersManager.GroupID).Count();

            returnPlayerList.SetApplyUsers(counts);
            var returnPlayerListData = returnPlayerList.Build().ToByteArray();

            session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1051, returnPlayerListData.Length, requestInfo.MessageNum, returnPlayerListData)));
        }
コード例 #26
0
        public void ExecuteCommand(GameSession session, ProtobufRequestInfo requestInfo)
        {
            try
            {
                GroupInfoDAL groupInfoDAL = new GroupInfoDAL();
                var          info         = MaintainHeartbeat.ParseFrom(requestInfo.Body);
                var          userInfo     = RedisUtility.Get <RedisUserInfoModel>(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERINFO, info.Openid, info.Unionid));
                if (userInfo != null)
                {
                    var olduser = RedisUtility.Get <RedisLoginModel>(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERLIST, info.Openid, info.Unionid));
                    if (olduser == null)
                    {
                        RedisUtility.Set(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERLIST, userInfo.Openid, userInfo.Unionid), new RedisLoginModel {
                            Openid = userInfo.Openid, ServerName = GameInformationBase.serverName, Unionid = userInfo.Unionid
                        });
                    }
                    if (!Gongyong.userlist.Any(w => w.unionid.Equals(userInfo.Unionid)))
                    {
                        Gongyong.userlist.Add(new UserInfo
                        {
                            city     = userInfo.City,
                            ConnTime = userInfo.ConnTime,
                            GroupID  = userInfo.GroupID,
                            headimg  = userInfo.Headimg,
                            Lat      = userInfo.Lat,
                            nickname = userInfo.Nickname,
                            openid   = userInfo.Openid,
                            province = userInfo.Province,
                            session  = session,
                            sex      = userInfo.Sex,
                            unionid  = userInfo.Unionid,
                            UserID   = userInfo.UserID,
                            UserIP   = session.RemoteEndPoint.Address.ToString(),
                            Type     = userInfo.Type
                        });
                    }
                    session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1, requestInfo.Body.Length, requestInfo.MessageNum, requestInfo.Body)));
                    var list = groupInfoDAL.GetUpdateTipsByUserID(info.UserID);
                    if (list.Any())
                    {
                        var data = ReturnMessgaeList.CreateBuilder().AddRangeMessgaeList(list).Build().ToByteArray();
                        session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1111, data.Length, requestInfo.MessageNum, data)));
                    }
                }
                //UserInfo user = Gongyong.userlist.Find(u => u.openid == info.Openid);
                //if (user == null)
                //    return;
                //if (user.session.SessionID != session.SessionID)
                //{
                //    user.session = session;
                //}
                //List<MsgLog> list = Gongyong.msg.FindAll(u => u.openid == user.openid);
                //if (list.Count > 0)
                //{

                //    var usermsg = ReturnMsgList.CreateBuilder();
                //    foreach (var item in list)
                //    {

                //        Google.ProtocolBuffers.ByteString bytes = Google.ProtocolBuffers.ByteString.CopyFrom(item.msg.ToArray());
                //        usermsg.AddMsg(bytes);
                //        Gongyong.msg.Remove(item);
                //    }
                //    byte[] arr = usermsg.Build().ToByteArray();
                //    session.TrySend(new ArraySegment<byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 7002, arr.Length, requestInfo.MessageNum, arr)));
                //}
            }
            catch (Exception ex)
            {
                //  Logger .Error()
                session.Logger.Error(ex.ToString());
                session.Close();
            }
        }