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));
        }
示例#2
0
        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));
        }