예제 #1
0
        public void RequestLogin(ServerPacketData packetData)
        {
            var sessionID    = packetData.SessionID;
            var sessionIndex = packetData.SessionIndex;

            MainServer.MainLogger.Debug("로그인 요청 받음");

            try
            {
                if (SessionManager.EnableReuqestLogin(sessionIndex) == false)
                {
                    ResponseLoginToClient(ERROR_CODE.LOGIN_ALREADY_WORKING, packetData.SessionID);
                    return;
                }

                var reqData = MessagePackSerializer.Deserialize <PKTReqLogin>(packetData.BodyData);

                // 세션의 상태를 바꾼다
                SessionManager.SetPreLogin(sessionIndex);

                // DB 작업 의뢰한다.
                var dbReqLogin = new DBReqLogin()
                {
                    UserID    = reqData.UserID,
                    AuthToken = reqData.AuthToken
                };
                var jobDatas = MessagePackSerializer.Serialize(dbReqLogin);

                var dbQueue = MakeDBQueue(PACKETID.REQ_DB_LOGIN, sessionID, sessionIndex, jobDatas);
                RequestDBJob(ServerNetwork.GetPacketDistributor(), dbQueue);

                MainServer.MainLogger.Debug("DB에 로그인 요청 보냄");
            }
            catch (Exception ex)
            {
                // 패킷 해제에 의해서 로그가 남지 않도록 로그 수준을 Debug로 한다.
                MainServer.MainLogger.Error(ex.ToString());
            }
        }