public ServerPacketId DeleteAccount(byte[] data) { Console.WriteLine(tcpPacket.client.RemoteEndPoint.ToString() + " 탈퇴요청"); AccountPacket accountPacket = new AccountPacket(data); AccountData accountData = accountPacket.GetData(); Console.WriteLine("아이디 : " + accountData.Id + "패스워드 : " + accountData.Id); try { if (database.DeleteAccountData(accountData.Id, accountData.password)) { msg[0] = (byte)UnityServer.Result.Success; Console.WriteLine("탈퇴 성공"); } else { msg[0] = (byte)UnityServer.Result.Fail; Console.WriteLine("탈퇴 실패"); } } catch { Console.WriteLine("DataHandler::RemovePlayerData 에러"); Console.WriteLine("탈퇴 실패"); msg[0] = (byte)UnityServer.Result.Fail; } Array.Resize(ref msg, 1); msg = CreateResultPacket(msg, ServerPacketId.DeleteResult); return(ServerPacketId.DeleteResult); }
//split this up into two methods, one for registering and one for logging in public void SubmitAccount(string findUser, string findPass, MenuLink ml, bool registering) { GameObject passwordGameObj = GameObject.Find(findPass); InputField passwordInput = passwordGameObj.GetComponent <InputField>(); GameObject userGameObj = GameObject.Find(findUser); InputField usernameInput = userGameObj.GetComponent <InputField>(); string password = passwordInput.text; string userName = usernameInput.text; //problem with this line as registering shouldn't go into CharacterMenu statusBoxHandler.InstantiatePrefab(Menus.CharacterMenu, MenuPrefabs.StatusBox); try { CheckInputs(userName, password); AccountPacket ap = new AccountPacket(); byte[] data = ap.GetDataBytes(userName, password); SubPacket subPacket = new SubPacket(registering, (ushort)userName.Length, (ushort)password.Length, 0, 0, data, SubPacketTypes.Account); BasePacket packetToSend = BasePacket.CreatePacket(subPacket, false, false); Utils.SetAccountName(userName); packetProcessor = GameObject.FindGameObjectWithTag("PacketProcessor").GetComponent <PacketProcessor>(); packetProcessor.LoginOrRegister(packetToSend); } catch (AccountException e) { StatusBoxHandler.statusText = e.Message; StatusBoxHandler.readyToClose = true; } }
public ServerPacketId DeleteAccount(byte[] data) { Console.WriteLine(tcpPacket.client.RemoteEndPoint.ToString() + " 탈퇴요청"); AccountPacket accountPacket = new AccountPacket(data); AccountData accountData = accountPacket.GetData(); Console.WriteLine("아이디 : " + accountData.Id + "패스워드 : " + accountData.Id); try { if (fileIO.RemovePlayerData(accountData.Id, accountData.password)) { msg = Encoding.Unicode.GetBytes("success"); } else { msg = Encoding.Unicode.GetBytes("fail"); } } catch { Console.WriteLine("DataHandler::RemovePlayerData 에러"); msg = Encoding.Unicode.GetBytes("fail"); } return(ServerPacketId.DeleteResult); }
public static AccountPacket Parse(NetworkMessage message) { AccountPacket packet = new AccountPacket(); packet.Os = message.GetUInt16(); // OS packet.Version = message.GetUInt16(); // version // File checks message.GetUInt32(); message.GetUInt32(); message.GetUInt32(); message.RSADecrypt(); message.GetByte(); // should be zero packet.XteaKey = new uint[4]; packet.XteaKey[0] = message.GetUInt32(); packet.XteaKey[1] = message.GetUInt32(); packet.XteaKey[2] = message.GetUInt32(); packet.XteaKey[3] = message.GetUInt32(); packet.AccountName = message.GetString(); // account name packet.Password = message.GetString(); // password return packet; }
/// <summary> /// Called when [client read handshake message]. /// </summary> /// <param name="result">The result.</param> /// <exception cref="InvalidNetworkProtocolException"></exception> /// <exception cref="InvalidRsaException"></exception> /// <exception cref="AuthenticationFailedException"></exception> private void OnClientReadHandshakeMessage(IAsyncResult result) { // TODO: 2) Disconnect: Validation of timestamp and random number (sent before first login packet?) // TODO: 3) Disconnect: Only clients with current protocol allowed (Change to automatic update) // TODO: 4) Disconnect: Gamestate // TODO: 5) Disconnect: IP banishments (Change to automatic timer backwards) // TODO: 6) Character data (e.g.: Skin & Mount) to render on client side if (!EndRead(result)) { return; } try { if (IncomingMessage.ReadNetworkProtocol() != NetworkProtocol.Login) { throw new InvalidNetworkProtocolException(); } AccountPacket accountPacket = AccountPacket.Parse(IncomingMessage); if (!accountPacket.IsRsaValid) { throw new InvalidRsaException(); } AuthenticationEventArgs authenticationEventArgs = new AuthenticationEventArgs(accountPacket.Username, accountPacket.Password); Authenticate?.Invoke(this, authenticationEventArgs); if (authenticationEventArgs.Cancel) { throw new AuthenticationFailedException(); } Xtea = accountPacket.Xtea; Account account = new Account { UserName = accountPacket.Username, Password = accountPacket.Password, OSPlatform = accountPacket.OSPlatform, ClientVersion = accountPacket.Version }; LoginDataEventArgs loginDataEventArgs = new LoginDataEventArgs(account); RequestLoginData?.Invoke(this, loginDataEventArgs); SendLoginWindow((loginDataEventArgs.Account.PremiumExpirationDate - DateTime.Today).Days, loginDataEventArgs.Account.UserName, loginDataEventArgs.Account.Password, loginDataEventArgs.Characters, loginDataEventArgs.Worlds, loginDataEventArgs.Notification); } catch { // TODO: Log invalid data from the client } finally { Close(); } }
public void DeleteAccount(string Id, string Pw) { AccountData accountData = new AccountData(Id, Pw); AccountPacket accountPacket = new AccountPacket(accountData); byte[] msg = CreatePacket(accountPacket, ClientPacketId.Delete); sendMsg.Enqueue(msg); }
public void CreateAccount(string Id, string Pw) { Debug.Log("회원가입"); AccountData accountData = new AccountData(Id, Pw); AccountPacket accountPacket = new AccountPacket(accountData); byte[] msg = CreatePacket(accountPacket, ClientPacketId.Create); sendMsg.Enqueue(msg); }
public ServerPacketId Login(byte[] data) { Console.WriteLine(tcpPacket.client.RemoteEndPoint.ToString() + " 로그인요청"); AccountPacket accountPacket = new AccountPacket(data); AccountData accountData = accountPacket.GetData(); Console.WriteLine("아이디 : " + accountData.Id + "비밀번호 : " + accountData.password); try { if (database.AccountData.Contains(accountData.Id)) { if (((LoginData)database.AccountData[accountData.Id]).PW == accountData.password) { if (!LoginUser.ContainsValue(accountData.Id)) { msg[0] = (byte)UnityServer.Result.Success; Console.WriteLine("로그인 성공"); LoginUser.Add(tcpPacket.client, accountData.Id); } else { Console.WriteLine("현재 접속중인 아이디입니다."); if (CompareIP(GetSocket(accountData.Id).RemoteEndPoint.ToString(), tcpPacket.client.RemoteEndPoint.ToString())) { LoginUser.Remove(GetSocket(accountData.Id)); Console.WriteLine("현재 접속중 해제"); } msg[0] = (byte)UnityServer.Result.Fail; } } else { Console.WriteLine("패스워드가 맞지 않습니다."); msg[0] = (byte)UnityServer.Result.Fail; } } else { Console.WriteLine("존재하지 않는 아이디입니다."); msg[0] = (byte)UnityServer.Result.Fail; } } catch { Console.WriteLine("DataHandler::PlayerData.Contains 에러"); msg[0] = (byte)UnityServer.Result.Fail; } Array.Resize(ref msg, 1); msg = CreateResultPacket(msg, ServerPacketId.LoginResult); return(ServerPacketId.LoginResult); }
//로그인 -> Server public void Login(string id, string pw) { Debug.Log("로그인"); AccountData accountData = new AccountData(id, pw); AccountPacket accountDataPacket = new AccountPacket(accountData); accountDataPacket.SetPacketId((int)ClientPacketId.Login); DataPacket packet = new DataPacket(CreatePacket(accountDataPacket), null); sendMsgs.Enqueue(packet); }
private void ClientReadFirstCallBack(IAsyncResult ar) { if (!EndRead(ar)) { return; } try { byte protocol = inMessage.GetByte(); // protocol id (1 = login, 2 = game) if (protocol == 0x01) { AccountPacket accountPacket = AccountPacket.Parse(inMessage); xteaKey = accountPacket.XteaKey; long accountId = Game.CheckLoginInfo(this, accountPacket, true); if (accountId >= 0) { this.AccountId = accountId; SendCharacterList( Settings.Default.MessageOfTheDay, 999, Database.GetCharacterList(accountId) ); } Close(); } else if (protocol == 0x0A) { ParseLoginPacket(inMessage); if (stream.CanRead) { stream.BeginRead(inMessage.Buffer, 0, 2, new AsyncCallback(ClientReadCallBack), null); } } } catch { // Invalid data from the client Close(); } }
public ServerPacketId Login(byte[] data) { Console.WriteLine(tcpPacket.client.RemoteEndPoint.ToString() + " 로그인요청"); AccountPacket accountPacket = new AccountPacket(data); AccountData accountData = accountPacket.GetData(); Console.WriteLine("아이디 : " + accountData.Id + "비밀번호 : " + accountData.password); try { if (fileIO.playerData.Contains(accountData.Id)) { if (fileIO.GetPlayerData(accountData.Id).PW == accountData.password) { if (!LoginUser.Contains(accountData.Id)) { msg = Encoding.Unicode.GetBytes("success"); Console.WriteLine("로그인 성공"); ((TcpClient)LoginUser[tcpPacket.client]).Id = accountData.Id; } else { Console.WriteLine("현재 접속중인 아이디입니다."); msg = Encoding.Unicode.GetBytes("fail"); } } else { Console.WriteLine("패스워드가 맞지 않습니다."); msg = Encoding.Unicode.GetBytes("fail"); } } else { Console.WriteLine("존재하지 않는 아이디입니다."); msg = Encoding.Unicode.GetBytes("fail"); } } catch { Console.WriteLine("DataHandler::PlayerData.Contains 에러"); msg = Encoding.Unicode.GetBytes("fail"); } return(ServerPacketId.LoginResult); }
public void DeleteAccount(DataPacket packet) { Console.WriteLine(packet.client.RemoteEndPoint.ToString() + " 탈퇴요청"); AccountPacket accountPacket = new AccountPacket(packet.msg); AccountData accountData = accountPacket.GetData(); Console.WriteLine("아이디 : " + accountData.Id + "패스워드 : " + accountData.Id); Result result = Result.Fail; try { if (database.DeleteAccountData(accountData.Id, accountData.Password) == Result.Success) { result = Result.Success; Console.WriteLine("탈퇴 성공"); } else { result = Result.Fail; Console.WriteLine("탈퇴 실패"); } } catch { Console.WriteLine("DataHandler::DeleteAccount.RemovePlayerData 에러"); result = Result.Fail; } ResultData resultData = new ResultData((byte)result); ResultPacket resultDataPacket = new ResultPacket(resultData); resultDataPacket.SetPacketId((int)ServerPacketId.DeleteAccountResult); byte[] msg = CreatePacket(resultDataPacket); packet = new DataPacket(msg, packet.client); lock (sendLock) { sendMsgs.Enqueue(packet); } }
public void Login(DataPacket packet) { Console.WriteLine(packet.client.RemoteEndPoint.ToString() + " 로그인"); AccountPacket accountPacket = new AccountPacket(packet.msg); AccountData accountData = accountPacket.GetData(); Console.WriteLine("아이디 : " + accountData.Id + "비밀번호 : " + accountData.Password); Result result = Result.Fail; try { if (database.AccountData.Contains(accountData.Id)) { if (((AccountData)database.AccountData[accountData.Id]).Password == accountData.Password) { List <string> id = new List <string>(loginUser.Values); if (!loginUser.ContainsValue(accountData.Id)) { result = Result.Success; Console.WriteLine("로그인 성공"); loginUser.Add(packet.client, accountData.Id); userState.Add(accountData.Id, new UserState(accountData.Id, -1)); database.AddUserData(accountData.Id); } else { Console.WriteLine("현재 접속중인 아이디입니다."); if (CompareIP(GetSocket(accountData.Id).RemoteEndPoint.ToString(), packet.client.RemoteEndPoint.ToString())) { loginUser.Remove(GetSocket(accountData.Id)); try { if (userState.ContainsKey(accountData.Id)) { if (userState[accountData.Id].state >= 0) { roomManager.ExitRoom(userState[accountData.Id].state, packet.client); } userState.Remove(accountData.Id); } } catch { Console.WriteLine("DataHandler::GameClose.ContainsKey - roomManager 에러"); Console.WriteLine("방에 입장하지 않았습니다."); } database.DeleteUserData(accountData.Id); Console.WriteLine("현재 접속중 해제"); } result = Result.Fail; } } else { Console.WriteLine("패스워드가 맞지 않습니다."); result = Result.Fail; } } else { Console.WriteLine("존재하지 않는 아이디입니다."); result = Result.Fail; } } catch (Exception e) { Console.WriteLine("DataHandler::Login.ContainsValue 에러" + e.Message); result = Result.Fail; } ResultData resultData = new ResultData((byte)result); ResultPacket resultDataPacket = new ResultPacket(resultData); resultDataPacket.SetPacketId((int)ServerPacketId.LoginResult); byte[] msg = CreatePacket(resultDataPacket); packet = new DataPacket(msg, packet.client); lock (sendLock) { sendMsgs.Enqueue(packet); } }