public void OnLoginAnswer(ProtobufPacket <LoginAnswerPacket> packet) { LoginAnswerPacket answer = packet.ProtobufMessage; if (answer.Success == true) { Debug.Log($"{answer.UserName} 님이 접속하셨습니다."); UserInfoManager.userName = answer.UserName; UserInfoManager.userState = MNetwork.Rooms.MNetworkPlayer.MPlayerState.LoginSuccess; } else { Debug.Log($"로그인 실패. [사유 : {answer.Context}]"); } OnSignIn?.Invoke(this, new Tuple <string, bool>(answer.Context, answer.Success)); }
private void OnLoginRequest(ProtobufPacket <LoginRequestPacket> packet) { LoginRequestPacket request = packet.ProtobufMessage; LoginAnswerPacket send = new LoginAnswerPacket(); // Packet Data Set // 로그인 핸들러에게 로그인이 성공했는지를 알아온다. bool success = loginHandler.SignIn(request.ID, request.Password, out string userName); // 보낼 패킷의 정보 설정 send.UserName = userName; send.Success = success; send.Context = "로그인에 성공했습니다."; MNetworkPlayer player = NetworkLobby.FindPlayer(packet.Serial); if (send.Success == false) { send.Context = "아이디 또는 비밀번호를 확인해주세요."; } else if (player != null) { if (player.PlayerState >= MNetworkPlayer.MPlayerState.LoginSuccess) { // 이미 접속중인 클라이언트 처리 send.Success = false; send.Context = "이미 접속된 아이디입니다."; } else { MNetworkPlayer find = NetworkLobby.FindPlayer(userName); if (find != null) { // 이미 해당 닉네임을 가진 유저가 접속중임을 처리 send.Success = false; send.Context = "해당 아이디는 이미 다른\n컴퓨터에서 사용 중입니다."; } else { // 없다면 네임 리스트에 추가해준다. player.ID = request.ID; player.Password = request.Password; player.PlayerState = MNetworkPlayer.MPlayerState.LoginSuccess; player.UserName = userName; NetworkLobby.AddPlayerToNameList(player); send.Success = true; } } } if (send.Success == true) { Debug.Log($"S:[{packet.Serial}] The login was successful. Name: {player.UserName}"); } else { Debug.Log($"S:[{packet.Serial}] Login failed. Name: {player.UserName}"); } SendPacket(new ProtobufPacket <LoginAnswerPacket>(packet.Serial, PacketEnum.ProcessType.Data, (int)MessageType.LoginAnswer, send)); }