public async Task <LoginRes> LoginRequest(LoginReq reqPacket) { var resPacket = new LoginRes(); // 유저 패스워드 암호화. var encryptedPassword = Encrypter.EncryptString(reqPacket.UserPw); Console.WriteLine($"Login request : Id({reqPacket.UserId}), Pw({encryptedPassword})"); try { // DB에 유저가 가입되어 있는지를 조사한다. var userValidationReq = new UserValidationReq() { UserId = reqPacket.UserId, EncryptedPw = encryptedPassword }; var config = LoginServerConfig.GetInstance(); var userValidationRes = await HttpSender.RequestHttp <UserValidationReq, UserValidationRes>( config.DBServerAddress, config.DBServerPort, "DB/UserValidation", userValidationReq); // 가입되어 있지 않다면 에러 반환. if (userValidationRes.Result != (int)ErrorCode.None) { Console.WriteLine($"Invalid login request : Error({userValidationRes.Result}), Id({reqPacket.UserId}), Pw({encryptedPassword})"); resPacket.Result = userValidationRes.Result; resPacket.Token = -1; return(resPacket); } // 가입되어있다면 토큰을 생성한다. resPacket.Token = TokenGenerator.GetInstance().CreateToken(); // DB Server에 토큰을 등록한다. var registTokenReq = new RegistTokenReq() { UserId = reqPacket.UserId, Token = resPacket.Token }; var registTokenRes = await HttpSender.RequestHttp <RegistTokenReq, RegistTokenRes>( config.DBServerAddress, config.DBServerPort, "DB/RegistToken", registTokenReq); // 토큰 등록이 실패했다면 에러 반환. if (registTokenRes.Result != (int)ErrorCode.None) { Console.WriteLine($"Token regist failed : Error({registTokenRes.Result}), Id({reqPacket.UserId}), Pw({encryptedPassword})"); resPacket.Result = registTokenRes.Result; resPacket.Token = -1; return(resPacket); } // 모든 절차가 완료되었다면 정상값 반환. Console.WriteLine($"Login request completed : Id({reqPacket.UserId}), Pw({encryptedPassword})"); resPacket.Result = (int)ErrorCode.None; #if DEBUG // TODO :: 이부분을 관리 서버와의 통신으로 받아오는 것으로 고쳐야 함. //우선 직접적으로 게임서버에 접속하도록 한다. 왜냐면 다들 취업을 해서 개발시간이 줄어 들었기 때문이다. resPacket.ManageServerAddr = "localhost"; resPacket.ManageServerPort = 19000; #endif return(resPacket); } catch (Exception e) { Console.WriteLine($"Error invoked in login request. Message : {e.Message}"); resPacket.Result = (int)ErrorCode.LoginRequestException; return(resPacket); } }
public static TokenGenerator GetInstance() { return(_instance ?? (_instance = new TokenGenerator())); }