Ejemplo n.º 1
0
        protected override void Run(Session session, C2G_DDZPrepare_Req message, Action <G2C_DDZPrepare_Res> reply)
        {
            G2C_DDZPrepare_Res response = new G2C_DDZPrepare_Res();

            try
            {
                if (!GateHelper.SingSession(session))
                {
                    response.Error   = ErrorCode.ERR_SessionError;
                    response.Message = " 当前的session已经断开  !!!";
                    reply(response);
                    return;
                }

                int restul = RoomHelper.Prepare(message.GameId, message.AreaId, message.RoomId, message.UserId);
                if (restul == -1)
                {
                    response.Error   = ErrorCode.ERR_DDZPrepareError;
                    response.Message = " 准备失败  !!!";
                    reply(response);
                    return;
                }

                reply(response);
            }
            catch (Exception e)
            {
                ReplyError(response, e, reply);
            }
        }
Ejemplo n.º 2
0
        protected override void Run(Session session, C2G_GetRoomInfo_Req message, Action <G2C_GetRoomInfo_Res> reply)
        {
            G2C_GetRoomInfo_Res response = new G2C_GetRoomInfo_Res();

            try
            {
                if (!GateHelper.SingSession(session))
                {
                    response.Error   = ErrorCode.ERR_SessionError;
                    response.Message = " 当前的session已经断开  !!!";
                    reply(response);
                    return;
                }

                response.RoomData = (RoomData)RoomHelper.GetRoomInfo(message.GameId, message.AreaId, message.UserId, message.RoomId);

                if (response.RoomData == null)
                {
                    response.Error   = ErrorCode.ERR_GetRoomInfoError;
                    response.Message = " 获取房间信息失败  !!!";
                    reply(response);
                    return;
                }

                reply(response);
            }
            catch (Exception e)
            {
                ReplyError(response, e, reply);
            }
        }
Ejemplo n.º 3
0
        protected override void Run(Session session, C2G_GetRoomList_Req message, Action <G2C_GetRoomLis_Res> reply)
        {
            G2C_GetRoomLis_Res response = new G2C_GetRoomLis_Res();

            try
            {
                List <RoomListInfo> roomList = RoomHelper.GetRoomList(message.GameId, message.AreaId);

                if (roomList == null || roomList.Count < 1)
                {
                    response.Error   = ErrorCode.ERR_GetRoomListError;
                    response.Message = "获取房间列表失败 !!!";
                    reply(response);
                }

                response.RoomList = new RepeatedField <RoomListInfo>();

                roomList.ForEach(u => response.RoomList.Add(u));

                reply(response);
            }
            catch (Exception e)
            {
                ReplyError(response, e, reply);
            }
        }
Ejemplo n.º 4
0
        protected override async void Run(Session session, MH2MP_CreateRoom_Req message, Action <MP2MH_CreateRoom_Ack> reply)
        {
            MP2MH_CreateRoom_Ack response = new MP2MH_CreateRoom_Ack();

            try
            {
                //创建房间
                Room room = ComponentFactory.Create <Room>();
                room.AddComponent <DeckComponent>();
                room.AddComponent <DeskCardsCacheComponent>();
                room.AddComponent <OrderControllerComponent>();
                room.AddComponent <GameControllerComponent, RoomConfig>(RoomHelper.GetConfig(RoomLevel.Lv100));
                await room.AddComponent <MailBoxComponent>().AddLocation();

                Game.Scene.GetComponent <RoomComponent>().Add(room);

                Log.Info($"创建房间{room.InstanceId}");

                response.RoomID = room.InstanceId;

                reply(response);
            }
            catch (Exception e)
            {
                ReplyError(response, e, reply);
            }
        }
Ejemplo n.º 5
0
        protected async override void Run(Session session, C2G_QuitRoom_Req message, Action <G2C_QuitRoom_Res> reply)
        {
            G2C_QuitRoom_Res response = new G2C_QuitRoom_Res();

            try
            {
                if (!GateHelper.SingSession(session))
                {
                    response.Error   = ErrorCode.ERR_SessionError;
                    response.Message = " 当前的session已经断开  !!!";
                    reply(response);
                    return;
                }

                var Result = await RoomHelper.QuitRoom(message.GameId, message.AreaId, message.UserId, message.RoomId);

                if (Result != "0" && Result != "1")
                {
                    response.Error   = ErrorCode.ERR_QuitRoomError;
                    response.Message = Result;
                    reply(response);
                    return;
                }

                reply(response);
            }
            catch (Exception e)
            {
                ReplyError(response, e, reply);
            }
        }
Ejemplo n.º 6
0
        protected override void Run(Session session, C2G_DDZPlayCard_Req message, Action <G2C_DDZPlayCard_Res> reply)
        {
            G2C_DDZPlayCard_Res response = new G2C_DDZPlayCard_Res();

            try
            {
                if (!GateHelper.SingSession(session))
                {
                    response.Error   = ErrorCode.ERR_SessionError;
                    response.Message = " 当前的session已经断开  !!!";
                    reply(response);
                    return;
                }

                response = (G2C_DDZPlayCard_Res)RoomHelper.PlayCard(message.GameId, message.AreaId, message.RoomId, message);

                response.UserId = message.UserId;

                reply(response);
            }
            catch (Exception e)
            {
                ReplyError(response, e, reply);
            }
        }
Ejemplo n.º 7
0
        protected override void Run(Session session, G2G_CreateRoom_Req message, Action <G2G_CreateRoom_Res> reply)
        {
            G2G_CreateRoom_Res response = new G2G_CreateRoom_Res();

            try
            {
                RoomHelper.CreateRoom();

                reply(response);
            }
            catch (Exception e)
            {
                ReplyError(response, e, reply);
            }
        }
Ejemplo n.º 8
0
        protected async override void Run(Session session, C2G_ChangerRoom_Req message, Action <G2C_ChangerRoom_Res> reply)
        {
            G2C_ChangerRoom_Res response = new G2C_ChangerRoom_Res();

            try
            {
                if (!GateHelper.SingSession(session))
                {
                    response.Error   = ErrorCode.ERR_SessionError;
                    response.Message = " 当前的session已经断开  !!!";
                    reply(response);
                    return;
                }

                int[] restul = RoomHelper.ChangerRoom(message.GameId, message.AreaId, message.RoomId, session.Id);

                if (restul[0] == -1)
                {
                    response.Error   = ErrorCode.ERR_ChangerRoomError;
                    response.Message = "换桌失败";
                    reply(response);
                    return;
                }

                var myLastRoomInfo = Game.Scene.GetComponent <PlayerManagerComponent>().Get(message.UserId).GetComponent <MyLastJionRoom>().MyLastJionRoomList;

                if (myLastRoomInfo.Count == 0)
                {
                    myLastRoomInfo.Add(new MyLastJionRoomData());
                }

                myLastRoomInfo.First().GameId = message.GameId;
                myLastRoomInfo.First().AreaId = message.AreaId;
                myLastRoomInfo.First().RoomId = restul[0];


                response.GameId = message.GameId;
                response.AreaId = message.AreaId;
                response.RoomId = restul[0];
                response.Index  = restul[1];

                reply(response);
            }
            catch (Exception e)
            {
                ReplyError(response, e, reply);
            }
        }
        protected override async void Run(Session session, C2G_StartMatch_Req message, Action <G2C_StartMatch_Ack> reply)
        {
            G2C_StartMatch_Ack response = new G2C_StartMatch_Ack();

            try
            {
                //验证Session
                if (!GateHelper.SignSession(session))
                {
                    response.Error = ErrorCode.ERR_SignError;
                    reply(response);
                    return;
                }

                User user = session.GetComponent <SessionUserComponent>().User;

                //验证玩家是否符合进入房间要求,默认为100底分局
                RoomConfig roomConfig = RoomHelper.GetConfig(RoomLevel.Lv100);
                UserInfo   userInfo   = await Game.Scene.GetComponent <DBProxyComponent>().Query <UserInfo>(user.UserID, false);

                if (userInfo.Money < roomConfig.MinThreshold)
                {
                    response.Error = ErrorCode.ERR_UserMoneyLessError;
                    reply(response);
                    return;
                }

                //这里先发送响应,让客户端收到后切换房间界面,否则可能会出现重连消息在切换到房间界面之前发送导致重连异常
                reply(response);

                //向匹配服务器发送匹配请求
                StartConfigComponent config          = Game.Scene.GetComponent <StartConfigComponent>();
                IPEndPoint           matchIPEndPoint = config.MatchConfig.GetComponent <InnerConfig>().IPEndPoint;
                Session matchSession = Game.Scene.GetComponent <NetInnerComponent>().Get(matchIPEndPoint);
                M2G_PlayerEnterMatch_Ack m2G_PlayerEnterMatch_Ack = await matchSession.Call(new G2M_PlayerEnterMatch_Req()
                {
                    PlayerID  = user.InstanceId,
                    UserID    = user.UserID,
                    SessionID = session.InstanceId,
                }) as M2G_PlayerEnterMatch_Ack;

                user.IsMatching = true;
            }
            catch (Exception e)
            {
                ReplyError(response, e, reply);
            }
        }
Ejemplo n.º 10
0
        protected async override void Run(Session session, C2G_JionRoom_Req message, Action <G2C_JionRoom_Res> reply)
        {
            G2C_JionRoom_Res response = new G2C_JionRoom_Res();

            try
            {
                if (!GateHelper.SingSession(session))
                {
                    response.Error   = ErrorCode.ERR_SessionError;
                    response.Message = " 当前的session已经断开  !!!";
                    reply(response);
                    return;
                }

                int RoomId = RoomHelper.JionRoom(message.GameId, message.AreaId, message.UserId, session.Id, message.RoomId, out string errMsg);

                if (RoomId == -1)
                {
                    response.Error   = ErrorCode.ERR_JionRoomError;
                    response.Message = errMsg;
                    reply(response);
                    return;
                }

                var myLastRoomInfo = Game.Scene.GetComponent <PlayerManagerComponent>().Get(message.UserId).GetComponent <MyLastJionRoom>().MyLastJionRoomList;

                myLastRoomInfo.Clear();

                MyLastJionRoomData myLast = new MyLastJionRoomData()
                {
                    GameId = message.GameId,
                    AreaId = message.AreaId,
                    RoomId = RoomId
                };

                myLastRoomInfo.Add(myLast);

                response.RoomId = RoomId;

                reply(response);
            }
            catch (Exception e)
            {
                ReplyError(response, e, reply);
            }
        }
Ejemplo n.º 11
0
        public async override void Destroy(SessionUserComponent self)
        {
            DBProxyComponent dbProxy = Game.Scene.GetComponent <DBProxyComponent>();

            try
            {
                StartConfigComponent config = Game.Scene.GetComponent <StartConfigComponent>();

                IPEndPoint realmIPEndPoint = config.RealmConfig.GetComponent <InnerConfig>().IPEndPoint;

                Session realmSession = Game.Scene.GetComponent <NetInnerComponent>().Get(realmIPEndPoint);

                await realmSession.Call(new G2R_PlayerOffline_Req()
                {
                    UserID = self.userInfo.Id
                });

                var myLastRoomInfo = self.userInfo.GetComponent <MyLastJionRoom>().MyLastJionRoomList;

                if (myLastRoomInfo.Count > 0)
                {
                    RoomHelper.QuitRoom(myLastRoomInfo.First().GameId, myLastRoomInfo.First().AreaId, self.userInfo.Id, myLastRoomInfo.First().RoomId);
                }

                self.userInfo.IsOnline = false;

                DateTime endTime = DateTime.Now;

                await dbProxy.Save(Game.Scene.GetComponent <PlayerManagerComponent>().Get(self.userInfo.Id));

                Game.Scene.GetComponent <PlayerManagerComponent>()?.Remove(self.userInfo.Id);

                self.userInfo.Dispose();

                self.userInfo = null;

                Game.Scene.GetComponent <PingComponent>().RemoveSession(self.sessionId);
            }
            catch (System.Exception e)
            {
                Log.Trace(e.ToString());
            }
        }