using GameServer.Quest; using Nettention.Proud; using ServerCommon; using ServerCore; using ServerBase; using static ClientToGameMessage.Types; using static ClientToGameReq.Types; namespace GameServer { internal class AuthHandler { public AuthHandler() { } // static public async Task ProcessRequestPacket(HostID remote, RmiContext rmictx, ClientToGameReq request) // { // // Log.getLogger().info($"[{Thread.CurrentThread.ManagedThreadId}] recved. {request.MsgCase}"); // #if SEQUENCE // ServerLog.Sequence("GameClient", "GameServer", request.MsgCase.ToString()); // #endif // using (var clientInfo = GameServer.Instance._srv.GetClientInfo(remote)) // { // ClientSession? session = ClientSessionManager.Instance.GetSession(remote); // if (session == null) // { // GameServer.Instance._srv.CloseConnection(remote); // Log.getLogger().error($"Not found Session : {clientInfo.tcpAddrFromServer.IPToString()}"); // return; // } // await session._serializer.post(async () => // { // if (session.IsClosedProcessed) // { // Log.getLogger().error($"{session.Id} Session is Closed : {remote}"); // return; // } // /* 패킷별로 시간을 나누어야 될듯 // DateTime curTime = DateTime.Now; // TimeSpan diff = curTime - session.lastPacketReceivTime; // if (diff <= TimeSpan.FromMilliseconds(50)) // { // Log.getLogger().warn($"{session.Id} ClientIP:{clientInfo.tcpAddrFromServer.IPToString()}, {request}"); // } // // session.lastPacketReceivTime = curTime; // */ // switch (request.MsgCase) // { // case ClientToGameReq.MsgOneofCase.LoginReq: // await HandleLoginReq(session, rmictx, request.LoginReq); // break; // case ClientToGameReq.MsgOneofCase.LogoutReq: // await HandleLogoutReq(session, request.LogoutReq); // break; // default: // await session.ProcessRequestPacket(request); // break; // } // // }); // } // // } // static async Task HandleLoginReq(ClientSession session, RmiContext rmiCtx, LoginReq loginReq) // { // ClientToGame clientToGame = new(); // clientToGame.Response = new(); // clientToGame.Response.LoginRes = new(); // try // { // Log.getLogger().debug($"{loginReq.Name} loginReq {loginReq} {rmiCtx.encryptMode}"); // // TODO: rmiCtx.encryptMode // if ( rmiCtx.encryptMode != EncryptMode.EM_Fast) // { // //Log.getLogger().error($"{loginReq.Name} loginReq {loginReq} {rmiCtx.encryptMode}"); // // session.Close();; // } // // var block_enable = GameServer.Instance.getUserLoginBlockEnable(); // if(true == block_enable.Value) // { // clientToGame.Response.ErrorCode = ServerErrorCode.AccountLoginBlockEnable; // session.Send(RmiContext.ReliableSend, clientToGame); // Log.getLogger().debug($"User login Block !!! : {loginReq.Name}"); // await session.Close(); // return; // } // // if (AccountAuthorityManager.Instance.IsWhiteListUser(loginReq.Name) == false) // { // //점검중 // if (AccountAuthorityManager.Instance.isInspection == true || // AccountAuthorityManager.Instance.isReadyForDistroy == true) // { // clientToGame.Response.ErrorCode = ServerErrorCode.Inspection; // session.Send(RmiContext.ReliableSend, clientToGame); // Log.getLogger().debug($"Now Inspection : {loginReq.Name}"); // await session.Close(); // return; // } // // if (AccountAuthorityManager.Instance.IsBlackListUser(loginReq.Name) == true) // { // clientToGame.Response.ErrorCode = ServerErrorCode.BlackList; // session.Send(RmiContext.ReliableSend, clientToGame); // Log.getLogger().debug($"BlackList User :{loginReq.Name}"); // await session.Close(); // return; // } // } // // var loginInfo = await GameServerApp.Instance.LoginStorage.GetLoginInfo(loginReq.Name); // // if (loginInfo == null || loginInfo.Moving == null) // { // clientToGame.Response.ErrorCode = ServerErrorCode.LoginFail; // session.Send(RmiContext.ReliableSend, clientToGame); // Log.getLogger().error($"Not found LoginInfo User:{loginReq.Name}"); // await session.Close(); // return; // } // // string departureServer = loginInfo.CurrentServer; // // if (loginReq.Otp != loginInfo.Moving.OneTimeKey) // { // clientToGame.Response.ErrorCode = ServerErrorCode.InvalidToken; // session.Send(RmiContext.ReliableSend, clientToGame); // Log.getLogger().error($"{loginReq.Name} Not correct Token {loginReq.Otp} != {loginInfo.Moving.OneTimeKey}"); // await session.Close(); // return; // } // // if (await GameServerApp.Instance.LoginStorage.EndMoving(loginReq.Name, DateTime.Now) == false) // { // clientToGame.Response.ErrorCode = ServerErrorCode.LoginFail; // session.Send(RmiContext.ReliableSend, clientToGame); // Log.getLogger().error($"EndMoving fail !!! {loginReq.Name}"); // await session.Close(); // return; // } // // if (loginInfo.Moving.DestServer != GameServer.Instance.ServerName) // { // clientToGame.Response.ErrorCode = ServerErrorCode.LoginFail; // session.Send(RmiContext.ReliableSend, clientToGame); // Log.getLogger().error($"Not correct Server:{loginInfo.Moving.DestServer} cur:{GameServer.Instance.ServerName} LoginInfo User:{loginReq.Name}"); // await session.Close(); // return; // } // // session.Id = loginInfo.Name; // session.AccountGuid = loginInfo.Guid; // session.Email = loginInfo.Email; // session.PartyGuid = loginInfo.PartyGuid; // // if (await session.AutoSelectChar(loginInfo) == false) // { // clientToGame.Response.ErrorCode = ServerErrorCode.LoginFail; // session.Send(RmiContext.ReliableSend, clientToGame); // Log.getLogger().error("Select Character fail !!!", session.ToString()); // await session.Close(); // return; // } // // if( session._selectedChar == null // || session._selectedChar._charEntity == null // || session._selectedChar._charEntity.CharInfo == null) // { // clientToGame.Response.ErrorCode = ServerErrorCode.LoginFail; // session.Send(RmiContext.ReliableSend, clientToGame); // Log.getLogger().error("Select Character fail !!!", session.ToString()); // await session.Close(); // return; // } // // if (session._selectedChar._charEntity.CharInfo.Operator != 1 // && ClientSessionManager.Instance.Count > (int)(ServerCommon.Constant.g_MaxUser)) // { // clientToGame.Response.ErrorCode = ServerErrorCode.ServerFull; // session.Send(RmiContext.ReliableSend, clientToGame); // Log.getLogger().debug($"Server Full ", session.ToString()); // await session.Close(); // return; // } // // if(session.GameGuardInitialize() == false) // { // clientToGame.Response.ErrorCode = ServerErrorCode.GameGuardUserInitFailed; // session.Send(RmiContext.ReliableSend, clientToGame); // Log.getLogger().debug($"GameGuard Init Failed.", session.ToString()); // await session.Close(); // return; // } // // if (false == ClientSessionManager.Instance.NewSession(session)) // { // clientToGame.Response.ErrorCode = ServerErrorCode.LoginFail; // session.Send(RmiContext.ReliableSend, clientToGame); // await session.Close(); // return; // } // // // 각종 정보 로드 // if (!await session.LoadDB()) // { // clientToGame.Response.ErrorCode = ServerErrorCode.DbError; // session.Send(RmiContext.ReliableSend, clientToGame); // await session.Close(); // Log.getLogger().error("LoadDB Fail !!!", session.ToString()); // return; // } // // bool IsPartyDestroy = false; // 서버 이동 중 파티가 해체되었는지 확인 // if (session.PartyGuid != string.Empty) // { // var error_code = await PartyManager.Instance.joinParty(session.PartyGuid, session); // if (error_code.isFail()) // { // IsPartyDestroy = true; // } // } // // InstanceRoom? joinedRoom = null; // if (GameServerApp.Instance.Config.GameServerType == EGameServerType.Channel) // { // if(GameServer.Instance.Map == null) // { // clientToGame.Response.ErrorCode = ServerErrorCode.ServerLogicError; // session.Send(RmiContext.ReliableSend, clientToGame); // Log.getLogger().error("GameServer.Instance.Map == null", session.ToString()); // await session.Close(); // return; // } // } // else // { // // 인스턴스 룸 입장 // joinedRoom = await InstanceRoomManager.Instance.JoinRoom(session, session._selectedChar.LastPositionInfo.EnterInstanceInfo.InstanceRoomId, session._selectedChar.LastPositionInfo.EnterInstanceInfo.InstanceId); // if (joinedRoom == null) // { // clientToGame.Response.ErrorCode = ServerErrorCode.LoginFail; // session.Send(RmiContext.ReliableSend, clientToGame); // Log.getLogger().error($"JoinRoom fail {loginReq.Name}", session.ToString()); // return; // } // } // // //여기서 Session 업데이트 // await GameServer.Instance.sessionUpdate(); // // clientToGame.Response.LoginRes.ServerUtcTime = Google.Protobuf.WellKnownTypes.Timestamp.FromDateTime(DateTime.UtcNow); // clientToGame.Response.ErrorCode = ServerErrorCode.Success; // session.Send(RmiContext.ReliableSend, clientToGame); // // 각종 정보 클라로 전송 // session.SendInfo(); // // bool isFromLogin = departureServer.Contains(EServerType.Login.ToString()); // // if (GameServerApp.Instance.Config.GameServerType == EGameServerType.Channel) // { // if(GameServer.Instance.Map != null) // { // session._selectedChar.EnterWorld(GameServer.Instance.Map, isFromLogin); // } // // session._selectedChar.SendPos(); // // //이전 서버가 게임서버이면 채널간 이동으로 본다. // if (departureServer.Contains(EServerType.Game.ToString())) // { // } // // await GameServerApp.Instance.LoginStorage.ChangeInstanceRoomId(session.Id, string.Empty); // } // else // { // // 인스턴스 룸 입장 패킷 전송 // if (joinedRoom != null) // { // await joinedRoom.SendJoinSuccess(session); // // await GameServerApp.Instance.LoginStorage.ChangeInstanceRoomId(session.Id, session.InstanceRoomId); // } // } // // if (isFromLogin) // { // session.SendInfoFromLogin(); // } // else // { // } // // if (session.PartyGuid != string.Empty) // { // if (IsPartyDestroy) // { // ClientToGame clientToGameNoti = new(); // clientToGameNoti.Message = new(); // clientToGameNoti.Message.DestroyPartyNoti = new(); // // session.Send(RmiContext.ReliableSend, clientToGameNoti); // // session.PartyGuid = string.Empty; // await GameServerApp.Instance.LoginStorage.ChangePartyGuid(session.Id, string.Empty); // } // else // { // // 서버 이동 중 파티원 위치 정보 및 본인 위치 정보 업데이트 // if (PartyManager.Instance.getMemberInfo(session.PartyGuid, session.getUserNickname(), out var memberInfo)) // { // if (session._selectedChar.getLocationInfo(out var locationInfo)) // { // memberInfo.LocationInfo = locationInfo; // // await PartyManager.Instance.UpdatePartyMemberInfo(session.PartyGuid, session.getUserNickname()); // PartyManager.Instance.sendPartyMemberLocationNoti(session.PartyGuid, session.getUserNickname(), session._selectedChar.Guid); // } // } // // PartyManager.Instance.sendAllPartyMemberLocationNoti(session.PartyGuid, session); // } // } // // session._selectedChar.ownedQuestList.checkQuestTimer(session._selectedChar); // await session.ownedFriendList.checkInviteNoti(session._selectedChar); // } // catch (Exception ex) // { // Log.getLogger().error($"{ex} account:{loginReq.Name}"); // clientToGame.Response.ErrorCode = ServerErrorCode.LoginFail; // session.Send(RmiContext.ReliableSend, clientToGame); // await session.Close(); // } // } // // static async Task HandleLogoutReq(ClientSession session, LogoutReq logoutReq) // { // Log.getLogger().debug($"logoutReq", session.ToString()); // // ClientToGame clientToGame = new(); // clientToGame.Response = new(); // clientToGame.Response.LogoutRes = new(); // clientToGame.Response.ErrorCode = ServerErrorCode.Success; // session.Send(RmiContext.ReliableSend, clientToGame); // // string sessionStr = session.ToString(); // // await session.Close(); // } } }