private bool CanClose() { while (MainForm.Instance.LocalAddress == null) { ; } if (MainForm.Instance.LocalAddress.ToString() == txtServer.Text) { txtServer.Text = "127.0.0.1"; } Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try { ConnectionHandler.ConnectTo(s, txtServer.Text, int.Parse(tempPortTxt.Text)); } catch { MessageBox.Show("Unable to connect to the server."); return(false); } ModUpdaterNetworkStream str = new ModUpdaterNetworkStream(s); Packet.Send(new HandshakePacket { Type = HandshakePacket.SessionType.ServerList }, str); Packet p = Packet.ReadPacket(str); //The server should only return a ServerList, right? ServerListPacket sp = null; if (!(p is ServerListPacket)) //But just in case... { Packet.Send(new DisconnectPacket(), str); ConnectTo = new Server { Address = txtServer.Text, Port = int.Parse(tempPortTxt.Text), Name = "Not Yet Defined." }; str.Close(); s.Disconnect(false); return(true); } sp = (ServerListPacket)p; List <Server> servers = new List <Server>(); for (int i = 0; i < sp.Servers.Length; i++) { Server srv = new Server { Address = sp.Locations[i], Name = sp.Servers[i], Port = sp.Ports[i] }; servers.Add(srv); } SelectServerDialog dial = new SelectServerDialog(servers.ToArray()); dial.ShowDialog(); if (dial.DialogResult != System.Windows.Forms.DialogResult.OK) { return(false); } ConnectTo = dial.SelectedServer; return(true); }
private void SendBanners(LoginSession session, Account account) { List <Banner> banners = DatabaseManager.Banners.FindAllBanners(); session.Send(NpsInfoPacket.SendUsername(account.Username)); session.Send(BannerListPacket.SetBanner(banners)); session.Send(ServerListPacket.SetServers(ServerName, ServerIPs)); }
public override void Handle(LoginSession session, PacketReader packet) { session.Send(BannerListPacket.SetBanner()); session.Send(ServerListPacket.SetServers(ServerName, ServerIPs)); List <Player> characters = DatabaseManager.GetAccountCharacters(session.AccountId); session.Send(CharacterListPacket.SetMax(4, 6)); session.Send(CharacterListPacket.StartList()); // Send each character data session.Send(CharacterListPacket.AddEntries(characters)); session.Send(CharacterListPacket.EndList()); }
public override void Handle(LoginSession session, PacketReader packet) { byte mode = packet.ReadByte(); string username = packet.ReadUnicodeString(); string password = packet.ReadUnicodeString(); // Hash the password with BCrypt string passwordHash = BCrypt.Net.BCrypt.HashPassword(password); // TODO: Change authenticate to return bool and add packet for wrong password Account account = DatabaseManager.Authenticate(username, password); // Auto add new accounts if (account == default) { account = new Account(username, passwordHash); } Logger.Debug($"Logging in with account ID: {account.Id}"); session.AccountId = account.Id; switch (mode) { case 1: PacketWriter pWriter = PacketWriter.Of(SendOp.NPS_INFO); pWriter.WriteLong(); pWriter.WriteUnicodeString(account.Username); session.Send(pWriter); List <Banner> banners = DatabaseManager.GetBanners(); session.Send(BannerListPacket.SetBanner(banners)); session.Send(ServerListPacket.SetServers(ServerName, ServerIPs)); break; case 2: List <Player> characters = DatabaseManager.GetAccountCharacters(session.AccountId); Logger.Debug($"Initializing login with account id: {session.AccountId}"); session.Send(LoginResultPacket.InitLogin(session.AccountId)); session.Send(UgcPacket.SetEndpoint("http://127.0.0.1/ws.asmx?wsdl", "http://127.0.0.1")); session.Send(CharacterListPacket.SetMax(account.CharacterSlots)); session.Send(CharacterListPacket.StartList()); // Send each character data session.Send(CharacterListPacket.AddEntries(characters)); session.Send(CharacterListPacket.EndList()); break; } }
public override void Handle(LoginSession session, PacketReader packet) { byte mode = packet.ReadByte(); string user = packet.ReadUnicodeString(); string pass = packet.ReadUnicodeString(); logger.Debug($"Logging in with user:{user} pass:{pass}"); // TODO: From this user/pass lookup we should be able to find the accountId if (string.IsNullOrEmpty(user) && string.IsNullOrEmpty(pass)) { //session.AccountId = StaticAccountStorage.DEFAULT_ACCOUNT; logger.Info($"No user and password provide logging in with root account "); } else { logger.Info($"Success, with any string in user and pass"); //session.AccountId = StaticAccountStorage.SECONDARY_ACCOUNT; } switch (mode) { case 1: session.Send(PacketWriter.Of(SendOp.NPS_INFO).WriteLong().WriteUnicodeString("")); session.Send(BannerListPacket.SetBanner()); session.Send(ServerListPacket.SetServers(serverName, serverIps)); break; case 2: List <Player> characters = new List <Player>(); /* * foreach (long characterId in accountStorage.ListCharacters(session.AccountId)) { * characters.Add(accountStorage.GetCharacter(characterId)); * }*/ Console.WriteLine("Initializing login with " + session.AccountId); session.Send(LoginResultPacket.InitLogin(session.AccountId)); session.Send(UgcPacket.SetEndpoint("http://127.0.0.1/ws.asmx?wsdl", "http://127.0.0.1")); session.Send(CharacterListPacket.SetMax(4, 6)); session.Send(CharacterListPacket.StartList()); // Send each character data session.Send(CharacterListPacket.AddEntries(characters)); session.Send(CharacterListPacket.EndList()); break; } }
public override void Handle(LoginSession session, PacketReader packet) { byte mode = packet.ReadByte(); string username = packet.ReadUnicodeString(); string password = packet.ReadUnicodeString(); Account account = DatabaseManager.GetAccount(username, password); // Auto add new accounts if (account == default) { account = new Account(GuidGenerator.Long(), username, password); if (!DatabaseManager.Insert(account)) { throw new ArgumentException("Could not create account"); } } Logger.Debug($"Logging in with account ID: {account.Id}"); session.AccountId = account.Id; switch (mode) { case 1: PacketWriter pWriter = PacketWriter.Of(SendOp.NPS_INFO); pWriter.WriteLong(); pWriter.WriteUnicodeString(""); session.Send(pWriter); session.Send(BannerListPacket.SetBanner()); session.Send(ServerListPacket.SetServers(ServerName, ServerIPs)); break; case 2: List <Player> characters = DatabaseManager.GetAccountCharacters(session.AccountId); Logger.Debug($"Initializing login with account id: {session.AccountId}"); session.Send(LoginResultPacket.InitLogin(session.AccountId)); session.Send(UgcPacket.SetEndpoint("http://127.0.0.1/ws.asmx?wsdl", "http://127.0.0.1")); session.Send(CharacterListPacket.SetMax(4, 6)); session.Send(CharacterListPacket.StartList()); // Send each character data session.Send(CharacterListPacket.AddEntries(characters)); session.Send(CharacterListPacket.EndList()); break; } }
public override void Handle(LoginSession session, PacketReader packet) { session.Send(BannerListPacket.SetBanner()); session.Send(ServerListPacket.SetServers(serverName, serverIps)); List<Player> characters = new List<Player>(); /* foreach (long characterId in accountStorage.ListCharacters(session.AccountId)) { characters.Add(accountStorage.GetCharacter(characterId)); }*/ session.Send(CharacterListPacket.SetMax(4, 6)); session.Send(CharacterListPacket.StartList()); // Send each character data session.Send(CharacterListPacket.AddEntries(characters)); session.Send(CharacterListPacket.EndList()); }
public override void Handle(LoginSession session, PacketReader packet) { List <Banner> banners = DatabaseManager.Banners.FindAllBanners(); session.Send(BannerListPacket.SetBanner(banners)); session.Send(ServerListPacket.SetServers(ServerName, ServerIPs)); List <Player> characters = DatabaseManager.Characters.FindAllByAccountId(session.AccountId); Account account = DatabaseManager.Accounts.FindById(session.AccountId); session.Send(CharacterListPacket.SetMax(account.CharacterSlots)); session.Send(CharacterListPacket.StartList()); // Send each character data session.Send(CharacterListPacket.AddEntries(characters)); session.Send(CharacterListPacket.EndList()); }
public override void Handle(LoginSession session, PacketReader packet) { byte mode = packet.ReadByte(); string username = packet.ReadUnicodeString(); string pass = packet.ReadUnicodeString(); Logger.Debug($"Logging in with username: '******' pass: '******'"); // TODO: From this user/pass lookup we should be able to find the accountId if (string.IsNullOrEmpty(username) && string.IsNullOrEmpty(pass)) { // send error / account credentials not found } session.AccountId = AccountStorage.DEFAULT_ACCOUNT_ID; switch (mode) { case 1: PacketWriter pWriter = PacketWriter.Of(SendOp.NPS_INFO); pWriter.WriteLong(); pWriter.WriteUnicodeString(""); session.Send(pWriter); session.Send(BannerListPacket.SetBanner()); session.Send(ServerListPacket.SetServers(ServerName, ServerIPs)); break; case 2: List <Player> characters = new List <Player>(); foreach (long characterId in AccountStorage.ListCharacters(session.AccountId)) { characters.Add(AccountStorage.GetCharacter(characterId)); } Logger.Debug($"Initializing login with account id: {session.AccountId}"); session.Send(LoginResultPacket.InitLogin(session.AccountId)); session.Send(UgcPacket.SetEndpoint("http://127.0.0.1/ws.asmx?wsdl", "http://127.0.0.1")); session.Send(CharacterListPacket.SetMax(4, 6)); session.Send(CharacterListPacket.StartList()); // Send each character data session.Send(CharacterListPacket.AddEntries(characters)); session.Send(CharacterListPacket.EndList()); break; } }
void ReceiveServerList(ServerListPacket packet) { (_engine.Models.Current as LoginModel).ShowServerList((packet).Servers); }
private Task HandleConnectionAsync(TcpClient tcpClient) { WelcomePacket packet = new WelcomePacket(); Send(tcpClient, packet.CreatePacket()); NewsTitlePacket packet2 = new NewsTitlePacket(); Send(tcpClient, packet2.CreatePacket()); NewsContentPacket packet3 = new NewsContentPacket(); Send(tcpClient, packet3.CreatePacket()); return(Task.Run(async() => { using (var networkStream = tcpClient.GetStream()) { while (true) { var buffer = new byte[4096]; Console.WriteLine("[Server] Reading from client"); var byteCount = await networkStream.ReadAsync(buffer, 0, buffer.Length); int?size = null; HeadCodeSc?headcode = null; byte type = buffer[0]; if (type == 0xC1 || type == 0xC3) { size = buffer[1]; headcode = (HeadCodeSc)buffer[2]; Console.WriteLine("C1/C3 packet type"); } else if (type == 0xC2 || type == 0xC4) { size = buffer[1] * 256; size |= buffer[2]; headcode = (HeadCodeSc)buffer[3]; Console.WriteLine("C2/C4 packet type"); } else { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Unknow packet type 0x{0:X}", type); Console.ResetColor(); continue; } Console.WriteLine("Read {0} bytes from socket.", byteCount); Console.WriteLine("Packet type: 0x{0:X} headcode: 0x{1:X} size: 0x{2:X}", type, headcode, size); Console.WriteLine(BitConverter.ToString(buffer, 0, (int)size)); try { if (headcode == HeadCodeSc.ConnectServerData) { if ((HeadCodeCs)buffer[3] == HeadCodeCs.ClientConnect) { ServerListPacket packetData = new ServerListPacket(udpServer); Send(tcpClient, packetData.CreatePacket()); } else if ((HeadCodeCs)buffer[3] == HeadCodeCs.ServerSelect) { ServerDataPacket packetData = new ServerDataPacket(udpServer, buffer); Send(tcpClient, packetData.CreatePacket()); } } } catch (Exception) { } } //await HandleConnectionAsync(tcpClient); } })); }