Esempio n. 1
0
        private static void Commands(string cmd)
        {
            switch (cmd)
            {
            case "help":
                Console.WriteLine("clear - clears the console\nplayers - shows how many players are online\ncheck - server goes in checking state\ndebug - see the packetflow\nexit - exit this application");
                break;

            case "clear":
                Console.Clear();
                Console.WriteLine("-------------------------------------------------------");
                Console.WriteLine(" <Silkroad Loginserver>  Copyright (C) <2011>  <DarkEmu>");
                Console.WriteLine("-------------------------------------------------------");
                break;

            case "players":
                Console.WriteLine("Player Online:{0}", ServerSocket.CountPlayers());
                break;

            case "debug":
                if (LoginSocket.debug)
                {
                    Console.WriteLine("Stopped debugging!");
                }
                else
                {
                    Console.WriteLine("Started debugging!");
                }
                LoginSocket.debug = !LoginSocket.debug;
                break;

            case "exit":
                exit = true;
                Console.WriteLine("Thanks for using. Server is shutting down!");
                break;
            }
        }
Esempio n. 2
0
        private static void SendLogin(byte[] buffer, int ClientIndex)
        {
            /*
             * 16 00 L
             * 02 61 Opcode
             * 00 00 Secu
             *
             * 12 Leng_total
             * 07 00 Leng_String
             * 63 61 72 6C 6F 73 78 = carlosx
             * 07 00 Leng_String
             * 63 61 72 6C 6F 73 78 = carlosx
             *
             * FF unk
             * 03 ServerID
             */
            PacketWriter writer = new PacketWriter();
            PacketReader reader = new PacketReader(buffer, buffer.Length);

            reader.ModifyIndex(7);

            ushort userlen = reader.ReadWord();
            string user    = reader.ReadString(false, userlen);

            ushort passlen = reader.ReadWord();
            string pass    = reader.ReadString(false, passlen);

            reader.ReadByte();
            ushort serverid = reader.ReadByte();

            Console.WriteLine("User:{0} - Password:{1} - ServerId:{2}", user, pass, serverid);

            int UserIndex = DatabaseCore.User.GetIndexByName(user);

            if (DatabaseCore.User.Banned[UserIndex])
            {
                ServerSocket.DisconnectSocket(ClientIndex);
                return;
            }
            else if (DatabaseCore.User.Online[UserIndex])
            {
                writer.SetOpcode(SERVER_OPCODES.LOGIN_SERVER_AUTH_INFO);
                writer.AppendWord(0x302);
                ServerSocket.Send(writer.getWorkspace(), ClientIndex);
                ServerSocket.DisconnectSocket(ClientIndex);
            }
            else if (DatabaseCore.User.User[UserIndex] != user || DatabaseCore.User.Password[UserIndex] != pass)
            {
                writer.SetOpcode(SERVER_OPCODES.LOGIN_SERVER_AUTH_INFO);

                DatabaseCore.User.FailedLogins[UserIndex]++;
                DatabaseCore.WriteQuery("UPDATE user SET failed_logins = '{0}' WHERE id = '{1}'", DatabaseCore.User.FailedLogins[UserIndex], DatabaseCore.User.User[UserIndex]);

                writer.AppendWord(0x0102);
                writer.AppendByte(DatabaseCore.User.FailedLogins[UserIndex]);
                writer.AppendDword(0x03000000);
                writer.AppendWord(0x00);
                writer.AppendByte(0x00);

                ServerSocket.Send(writer.getWorkspace(), ClientIndex);

                if (DatabaseCore.User.FailedLogins[UserIndex] == 3)
                {
                    DatabaseCore.User.FailedLogins[UserIndex] = 0;
                    DatabaseCore.WriteQuery("UPDATE user SET failed_logins = '{0}' WHERE id = '{1}'", DatabaseCore.User.FailedLogins[UserIndex], DatabaseCore.User.User[UserIndex]);

                    ServerSocket.DisconnectSocket(ClientIndex);
                }
            }
            else
            {
                int ServerIndex = DatabaseCore.Server.GetIndexById(serverid);

                if (DatabaseCore.Server.MaxUser[ServerIndex] <= DatabaseCore.Server.CurUser[ServerIndex])
                {
                    writer.SetOpcode(0xA103);
                    writer.AppendWord(0x402);
                    ServerSocket.Send(writer.getWorkspace(), ClientIndex);
                    return;
                }
                else
                {
                    writer.SetOpcode(SERVER_OPCODES.LOGIN_SERVER_AUTH_INFO);
                    writer.AppendByte(0x01);
                    writer.AppendDword(0x1234);

                    ushort leng_ip = (ushort)DatabaseCore.Server.ServerIp[ServerIndex].Length;
                    string str_ip  = DatabaseCore.Server.ServerIp[ServerIndex];
                    ushort port    = DatabaseCore.Server.ServerPort[ServerIndex];

                    writer.AppendWord(leng_ip);
                    writer.AppendString(false, str_ip);
                    writer.AppendWord(port);
                    ServerSocket.Send(writer.getWorkspace(), ClientIndex);
                    Console.WriteLine("Lengip:{0} - Ip:{1} - Port:{2}", leng_ip, str_ip, port);

                    //DatabaseCore.Server.CurUser[ServerIndex]++;
                    //DatabaseCore.WriteQuery("UPDATE server SET users_current = '{0}' WHERE name = '{1}'", DatabaseCore.Server.CurUser[ServerIndex], DatabaseCore.Server.ServerName[ServerIndex]);
                }
            }
        }
Esempio n. 3
0
        static void Main(string[] args)
        {
            Console.WriteLine("-------------------------------------------------------");
            Console.WriteLine(" <Silkroad Loginserver>  Copyright (C) <2011>.");
            Console.WriteLine("-------------------------------------------------------");

            Database.Connect(Settings.ReadSettings("Settings.txt"));
            Database.CheckTables(new string[]{"news", "server", "user"});

            DatabaseCore.SetPulseTime(20000);
            DatabaseCore.SetPulseFlag(false);
            DatabaseCore.SetQueryLocation("tmpQueryLoginServer.txt");
            DatabaseCore.Start();

            Console.WriteLine("Data from database loaded, Changes on the database wont effect the server now!");

            ServerSocket server = new ServerSocket("127.0.0.1", 15779);
            server.Start();

            Console.WriteLine("Use 'help' to get all commands.");
            while(exit == false)
                Commands(Console.ReadLine());
        }