Esempio n. 1
0
        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());
        }
Esempio n. 4
0
        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;
            }
        }
Esempio n. 5
0
        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;
            }
        }
Esempio n. 6
0
        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());
        }
Esempio n. 9
0
        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;
            }
        }
Esempio n. 10
0
 void ReceiveServerList(ServerListPacket packet)
 {
     (_engine.Models.Current as LoginModel).ShowServerList((packet).Servers);
 }
Esempio n. 11
0
        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);
                }
            }));
        }