public async Task <CreateUserRes> CreateUserRequest(CreateUserReq reqPacket) { var resPacket = new CreateUserRes(); //패킷으로부터 아이디와 비번을 알아낸다. //비번을 암호화 한후 var encryptedPassword = Encrypter.EncryptString(reqPacket.UserPw); Console.WriteLine($"Create User : Id({reqPacket.UserId}), Pw({encryptedPassword})"); //아이디와 비번을 데이터 베이스에 저장 이미 존재하는지는 DB 서버에서 확인한다. try { //패킷 생성 var userJoinReq = new UserJoinInReq() { UserId = reqPacket.UserId, EncryptedPw = encryptedPassword }; var config = LoginServerConfig.GetInstance(); var userJoinRes = await HttpSender.RequestHttp <UserJoinInReq, UserJoinInRes> (config.DBServerAddress, config.DBServerPort, "DB/AddUser", userJoinReq); //유저 생성이 완료되지 않았다면 에러 if (userJoinRes.Result != (int)ErrorCode.None) { Console.WriteLine($"User Create Fail : Error({userJoinRes.Result}), Id({reqPacket.UserId}), Pw({encryptedPassword})"); resPacket.Result = userJoinRes.Result; return(resPacket); } //완료되면 완료 패킷 Console.WriteLine($"User Create Success : Id({reqPacket.UserId}), Pw({encryptedPassword})"); resPacket.Result = (int)ErrorCode.None; return(resPacket); } catch (Exception e) { Console.WriteLine($"Error Occur at Create User Request. Message : {e.Message}"); resPacket.Result = (int)ErrorCode.CreateUserRequestException; return(resPacket); } }
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); } }