public static void S_LoginHandler(PacketSession session, IMessage packet)// 로그인 + 캐릭터 목록
    {
        S_Login loginPacket = packet as S_Login;

        // TODO 로그인 성공/실패

        Debug.Log($"loginOK({loginPacket.LoginOk})");

        // TODO : 로비에서 캐릭터 목록 보여주고, 선택
        if (loginPacket.Players == null || loginPacket.Players.Count == 0)
        {
            C_CreatePlayer createPacket = new C_CreatePlayer();
            createPacket.Name = $"Player_{Random.Range(0, 10000).ToString("0000")}";
            Managers.Network.Send(createPacket);
        }
        else
        {
            // 무조건 첫번쨰 캐릭터 로그인
            LobbyPlayerInfo info = loginPacket.Players[0];

            C_EnterGame enterGamePacket = new C_EnterGame();
            enterGamePacket.Name = info.Name;
            Managers.Network.Send(enterGamePacket);
        }
    }
Exemple #2
0
        private void Btn_IniciarSesion_Click(object sender, EventArgs e)
        {
            BLL_Login _Login = new BLL_Login();

            if (Txt_Username.Text != "" && Txt_Password.Text != "")
            {
                EE_Usuario _User = _Login.Logear(Txt_Username.Text, S_Encriptado.Encriptar(Txt_Password.Text));
                if (_User != null)
                {
                    //Login login_f = new Login();
                    S_Login.Login(_User);
                    MessageBox.Show("Inicio de sesion correcto");
                    bitacora.Usuario = _User;
                    bitacora.Hora    = DateTime.Now.Hour;
                    bitacora.Fecha   = DateTime.Now.Date;
                    AgregarBitacora();
                    update();
                    Cerrar(true);
                    this.Close();
                }
                else
                {
                    MessageBox.Show("Usuario o contraseña incorrecto");
                }
            }
            else
            {
                MessageBox.Show("Por favor ingrese los datos");
            }
        }
        private void BunifuFlatButton8_Click(object sender, EventArgs e)
        {
            S_Login log = S_Login.ObtenerSesion;

            log.Logout();

            ShowLogin();
        }
Exemple #4
0
    public static void S_LoginHandler(PacketSession session, IMessage packet)
    {
        S_Login       sLoginHandler = packet as S_Login;
        ServerSession serverSession = session as ServerSession;

        // 정상적으로 로그인이 되었음
        ObserverHandler.Instance.NotifyObserver(ObserverMessage.FindProfile);
    }
        public void HandleLogin(C_Login loginPacket)
        {
            //Console.WriteLine($"UniqueId({loginPacket.UniqueId})");

            //TODO : 보안체크
            if (ServerState != PlayerServerState.ServerStateLogin)
            {
                return;
            }

            //TODO : 문제
            // - 동시에 다른 사람이 같은 uniqueId를 보낸다면?
            // - 악의적으로 같은 패킷을 여러번 보낸다면? DB에 과부하가 발생할 수 있음
            // - 쌩뚱맞은 타이밍에 이 패킷을 보낸다면?

            using (AppDbContext db = new AppDbContext())
            {
                AccountDb findAccount = db.Accounts
                                        .Include(a => a.Players)
                                        .Where(a => a.AccountName == loginPacket.UniqueId)
                                        .FirstOrDefault();

                if (findAccount != null)
                {
                    S_Login loginOk = new S_Login()
                    {
                        LoginOk = 1
                    };
                    Send(loginOk);
                    Console.WriteLine($"기존 캐릭터 LoginOK = {loginOk.LoginOk}");
                }
                else
                {
                    AccountDb newAccount = new AccountDb()
                    {
                        AccountName = loginPacket.UniqueId
                    };
                    db.Accounts.Add(newAccount);
                    db.SaveChanges();                    // TODO : Exception

                    S_Login loginOk = new S_Login()
                    {
                        LoginOk = 1
                    };
                    Send(loginOk);
                    Console.WriteLine($"신규캐릭터 LoginOK = {loginOk.LoginOk}");
                }
            }
        }
Exemple #6
0
    // Step 2
    public static void S_LoginHandler(PacketSession session, IMessage packet)// 로그인 + 캐릭터 목록
    {
        S_Login       loginPacket   = packet as S_Login;
        ServerSession serverSession = session as ServerSession;

        if (loginPacket.Players == null || loginPacket.Players.Count == 0)
        {
            C_CreatePlayer createPacket = new C_CreatePlayer();
            createPacket.Name = $"DummyPlayer_{serverSession.DummyID.ToString("0000")}";
            serverSession.Send(createPacket);
        }
        else
        {
            // 무조건 첫번쨰 캐릭터 로그인
            LobbyPlayerInfo info = loginPacket.Players[0];

            C_EnterGame enterGamePacket = new C_EnterGame();
            enterGamePacket.Name = info.Name;
            serverSession.Send(enterGamePacket);
        }
    }
Exemple #7
0
    // Step2
    // 로그인 통과 + 캐릭터 목록
    public static void S_LoginHandler(PacketSession session, IMessage packet)
    {
        S_Login       loginPacket   = packet as S_Login;
        ServerSession serverSession = (ServerSession)session;

        // TODO : 로비 UI에서 케릭터 보여주고, 선택할 수 있도록
        if (loginPacket.Players == null || loginPacket.Players.Count == 0)
        {
            C_CreatePlayer createPacket = new C_CreatePlayer();
            createPacket.Name = $"Player_{serverSession.DummyId.ToString("0000")}";
            serverSession.Send(createPacket);
        }
        else
        {
            // 무조건 첫번째 캐릭터 로그인
            LobbyPlayerInfo info            = loginPacket.Players[0];
            C_EnterGame     enterGamePacket = new C_EnterGame();
            enterGamePacket.Name = info.Name;
            serverSession.Send(enterGamePacket);
        }
    }
Exemple #8
0
    // 로그인 OK + 캐릭터 목록
    public static void S_LoginHandler(PacketSession session, IMessage packet)
    {
        S_Login loginPacket = (S_Login)packet;

        Debug.Log($"LoginOk({loginPacket.LoginOk})");

        // TODO : 로비 UI에서 캐릭터 보여주고, 선택할 수 있도록
        if (loginPacket.Players == null || loginPacket.Players.Count == 0)
        {
            C_CreatePlayer createPacket = new C_CreatePlayer();
            createPacket.Name = $"Player_{Random.Range(0, 10000).ToString("0000")}";
            Managers.Network.Send(createPacket);
        }
        else
        {
            // 무조건 첫번째 로그인
            LobbyPlayerInfo info            = loginPacket.Players[0];
            C_EnterGame     enterGamePacket = new C_EnterGame();
            enterGamePacket.Name = info.Name;
            Managers.Network.Send(enterGamePacket);
        }
    }
Exemple #9
0
        public void HandleLogin(C_Login loginPacket)
        {
            // TODO 보안체크 더 강하게
            if (ServerState != PlayerServerState.ServerStateLogin)
            {
                return;
            }

            // TODO 각종 상황에 대비
            // -동시?
            // -악질 패킷
            // -이상한 타이밍
            LobbyPlayers.Clear();
            using (AppDbContext db = new AppDbContext())
            {
                AccountDb findAccount = db.Accounts
                                        .Include(a => a.Players)
                                        .Where(a => a.AccountName == loginPacket.UniqueId)
                                        .FirstOrDefault();

                if (findAccount != null)
                {                                          // 로그인 성공
                    AccountDbId = findAccount.AccountDbId; // Id는 자주쓰니 기억
                    S_Login loginOk = new S_Login()
                    {
                        LoginOk = 1
                    };
                    foreach (PlayerDb playerDb in findAccount.Players)
                    {
                        LobbyPlayerInfo lobbyPlayer = new LobbyPlayerInfo()
                        {
                            PlayerDbId = playerDb.PlayerDbId,
                            Name       = playerDb.PlayerName,
                            StatInfo   = new StatInfo()
                            {
                                Level    = playerDb.Level,
                                Hp       = playerDb.Hp,
                                MaxHp    = playerDb.MaxHp,
                                Attack   = playerDb.Attack,
                                Speed    = playerDb.Speed,
                                TotalExp = playerDb.TotalExp
                            }
                        };

                        // 메모리에 들고있는다 DB접근 최소화
                        LobbyPlayers.Add(lobbyPlayer);
                        // 패킷을 넣어준다
                        loginOk.Players.Add(lobbyPlayer);
                    }
                    Send(loginOk);

                    // 로비로 이동
                    ServerState = PlayerServerState.ServerStateLobby;
                }
                else
                { // 실패
                  // TEMP_ 새계정으로
                    AccountDb newAccount = new AccountDb()
                    {
                        AccountName = loginPacket.UniqueId
                    };
                    db.Accounts.Add(newAccount);
                    bool success = db.SaveChangesEx();
                    if (success == false)
                    {
                        return;
                    }

                    AccountDbId = newAccount.AccountDbId;        // Id는 자주쓰니 기억

                    // 로그인 실패
                    S_Login loginOk = new S_Login()
                    {
                        LoginOk = 1
                    };
                    Send(loginOk);

                    // 로비로 이동
                    ServerState = PlayerServerState.ServerStateLobby;
                }
            }
        }
Exemple #10
0
        public void HandleLogin(C_Login loginPacket)
        {
            // TODO : 이런 저런 보안 체크
            if (ServerState != PlayerServerState.ServerStateLogin)
            {
                return;
            }

            // TODO : 문제가 있긴 있다
            // - 동시에 다른 사람이 같은 UniqueId을 보낸다면?
            // - 악의적으로 여러번 보낸다면
            // - 쌩뚱맞은 타이밍에 그냥 이 패킷을 보낸다면?

            LobbyPlayers.Clear();

            using (AppDbContext db = new AppDbContext())
            {
                AccountDb findAccount = db.Accounts
                                        .Include(a => a.Players)
                                        .Where(a => a.AccountName == loginPacket.UniqueId).FirstOrDefault();

                if (findAccount != null)
                {
                    // AccountDbId 메모리에 기억
                    AccountDbId = findAccount.AccountDbId;

                    S_Login loginOk = new S_Login()
                    {
                        LoginOk = 1
                    };
                    foreach (PlayerDb playerDb in findAccount.Players)
                    {
                        LobbyPlayerInfo lobbyPlayer = new LobbyPlayerInfo()
                        {
                            PlayerDbId = playerDb.PlayerDbId,
                            Name       = playerDb.PlayerName,
                            StatInfo   = new StatInfo()
                            {
                                Level    = playerDb.Level,
                                Hp       = playerDb.Hp,
                                MaxHp    = playerDb.MaxHp,
                                Attack   = playerDb.Attack,
                                Speed    = playerDb.Speed,
                                TotalExp = playerDb.TotalExp
                            }
                        };

                        // 메모리에도 들고 있다
                        LobbyPlayers.Add(lobbyPlayer);

                        // 패킷에 넣어준다
                        loginOk.Players.Add(lobbyPlayer);
                    }

                    Send(loginOk);
                    // 로비로 이동
                    ServerState = PlayerServerState.ServerStateLobby;
                }
                else
                {
                    AccountDb newAccount = new AccountDb()
                    {
                        AccountName = loginPacket.UniqueId
                    };
                    db.Accounts.Add(newAccount);
                    bool success = db.SaveChangesEx();
                    if (success == false)
                    {
                        return;
                    }

                    // AccountDbId 메모리에 기억
                    AccountDbId = newAccount.AccountDbId;

                    S_Login loginOk = new S_Login()
                    {
                        LoginOk = 1
                    };
                    Send(loginOk);
                    // 로비로 이동
                    ServerState = PlayerServerState.ServerStateLobby;
                }
            }
        }
    public static void S_LoginHandler(PacketSession session, IMessage packet)
    {
        S_Login loginPakcet = packet as S_Login;

        Debug.Log($"LoginOK({loginPakcet.LoginOk})");
    }