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); } }
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(); }
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}"); } } }
// 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); } }
// 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); } }
// 로그인 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); } }
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; } } }
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})"); }