Beispiel #1
0
        private void AcceptCallback(IAsyncResult ar)
        {
            try
            {
                AllDone.Set();

                Socket _Listener = (Socket)ar.AsyncState;
                Socket _Handler  = _Listener.EndAccept(ar);

                Logger.Write("New TCP Client connected -> " + ((IPEndPoint)_Handler.RemoteEndPoint).Address);

                if (!ConnectionBlocker.IsAddressBanned(((IPEndPoint)_Handler.RemoteEndPoint).Address.ToString()))
                {
                    ResourcesManager.AddClient(_Handler);
                    new Reader(_Handler, this.ProcessPacket);
                }
                else
                {
                    Disconnect(_Handler);
                    ResourcesManager.DropClient(_Handler.Handle);
                }
            }
            catch (Exception)
            {
            }
        }
Beispiel #2
0
        public Loader()
        {
            // CSV Files and Logger
            this.Logger           = new Logger();
            this.DirectoryChecker = new DirectoryChecker();
            this.CsvManager       = new CSVManager();

            this.ConnectionBlocker = new ConnectionBlocker();
            if (Utils.ParseConfigBoolean("UseWebAPI"))
            {
                this.API = new API();
            }


            // Core
            this.LicenseChecker   = new LicenseChecker();
            this.ResourcesManager = new ResourcesManager();
            this.ObjectManager    = new ObjectManager();
            this.Events           = new EventsHandler();
            if (Constants.UseCacheServer)
            {
                this.Redis = new Redis();
            }


            this.CommandFactory = new CommandFactory();

            this.MessageFactory = new MessageFactory();

            // Optimazions
            this.MemThread = new MemoryThread();

            // User
            this.Parser = new ParserThread();
        }
Beispiel #3
0
        internal override void Process()
        {
            if (Depth >= MaxEmbeddedDepth)
            {
                IPEndPoint r = this.Device.Socket.RemoteEndPoint as IPEndPoint;
                ConnectionBlocker.AddNewIpToBlackList(r.Address.ToString());
                ResourcesManager.DropClient(this.Device.Socket.Handle);
            }

            if (this.Device.Player.WorkerManager.GetFreeWorkers() == 0)

            {
                Depth = 0;
                this.Device.Player.WorkerManager.FinishTaskOfOneWorker();
                if (this.m_vIsCommandEmbedded)
                {
                    int     CommandID = this.Reader.ReadInt32();
                    Command _Command  = Activator.CreateInstance(CommandFactory.Commands[CommandID], this.Reader, this.Device, CommandID) as Command;
                    if (_Command != null)
                    {
                        _Command.Decode();
                        _Command.Process();
                    }
                }
            }
        }
 internal override void Process()
 {
     if (Depth >= MaxEmbeddedDepth)
     {
         IPEndPoint r = this.Device.Socket.RemoteEndPoint as IPEndPoint;
         ConnectionBlocker.AddNewIpToBlackList(r.Address.ToString());
         ResourcesManager.DropClient(this.Device.Socket.Handle);
     }
     else
     {
         var rd = (ResourceData)CSVManager.DataTables.GetDataById(m_vResourceId);
         if (rd != null)
         {
             if (m_vResourceCount >= 1)
             {
                 if (!rd.PremiumCurrency)
                 {
                     var avatar            = this.Device.Player.Avatar;
                     var diamondCost       = GamePlayUtil.GetResourceDiamondCost(m_vResourceCount, rd);
                     var unusedResourceCap = avatar.GetUnusedResourceCap(rd);
                     if (m_vResourceCount <= unusedResourceCap)
                     {
                         if (avatar.HasEnoughDiamonds(diamondCost))
                         {
                             avatar.UseDiamonds(diamondCost);
                             avatar.CommodityCountChangeHelper(0, rd, m_vResourceCount);
                             if (m_vIsCommandEmbedded)
                             {
                                 int     CommandID = this.Reader.ReadInt32();
                                 Command _Command  =
                                     Activator.CreateInstance(CommandFactory.Commands[CommandID], this.Reader,
                                                              this.Device, CommandID) as Command;
                                 if (_Command != null)
                                 {
                                     _Command.Decode();
                                     _Command.Process();
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
 }
Beispiel #5
0
        public override void Execute(Level level)
        {
            if (Depth >= MaxEmbeddedDepth)
            {
                IPEndPoint r = level.GetClient().Socket.RemoteEndPoint as IPEndPoint;
                ConnectionBlocker.AddNewIpToBlackList(r.Address.ToString());
                ResourcesManager.DropClient(level.GetClient().Socket.Handle.ToInt64());
            }
            else
            {
                var rd = (ResourceData)CSVManager.DataTables.GetDataById(m_vResourceId);
                if (rd != null)
                {
                    if (m_vResourceCount >= 1)
                    {
                        if (!rd.PremiumCurrency)
                        {
                            var avatar            = level.GetPlayerAvatar();
                            var diamondCost       = GamePlayUtil.GetResourceDiamondCost(m_vResourceCount, rd);
                            var unusedResourceCap = avatar.GetUnusedResourceCap(rd);
                            if (m_vResourceCount <= unusedResourceCap)
                            {
                                if (avatar.HasEnoughDiamonds(diamondCost))
                                {
                                    avatar.UseDiamonds(diamondCost);
                                    avatar.CommodityCountChangeHelper(0, rd, m_vResourceCount);
                                    if (m_vIsCommandEmbedded)
                                    {
                                        Depth++;

                                        if (Depth >= MaxEmbeddedDepth)
                                        {
                                            throw new ArgumentException(
                                                      "A command contained embedded command depth was greater than max embedded commands.");
                                        }

                                        ((Command)m_vCommand).Execute(level);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
Beispiel #6
0
        public override void Execute(Level level)
        {
            if (Depth >= MaxEmbeddedDepth)
            {
                IPEndPoint r = level.GetClient().Socket.RemoteEndPoint as IPEndPoint;
                ConnectionBlocker.AddNewIpToBlackList(r.Address.ToString());
                ResourcesManager.DropClient(level.GetClient().Socket.Handle.ToInt64());
            }

            if (level.WorkerManager.GetFreeWorkers() == 0)
            {
                Depth = 0;
                level.WorkerManager.FinishTaskOfOneWorker();
                if (m_vIsCommandEmbedded)
                {
                    ((Command)m_vCommand).Execute(level);
                }
            }
        }
        public Loader()
        {
            // License Check
            //_LicenseChecker    = new LicenseChecker();

            // CSV Files and Logger
            _Logger = new Logger();

            _DirectoryChecker = new DirectoryChecker();

            _CSVManager = new CSVManager();


            // Network and Packets
            _ChatProcessor = new ChatProcessor();

            _ConnectionBlocker = new ConnectionBlocker();

            if (Utils.ParseConfigBoolean("UseWebAPI"))
            {
                _API = new API();
            }

            // Core
            _ResourcesManager = new ResourcesManager();

            _ObjectManager = new ObjectManager();

            _CommandFactory = new CommandFactory();

            _MessageFactory = new MessageFactory();

            // Optimazions
            _MemThread = new MemoryThread();

            // User
            _Parser = new ParserThread();

            // Creates a new Socket
            _Gateway = new Gateway();
        }
Beispiel #8
0
        static ParserThread()
        {
            T = new Thread((ThreadStart)(() =>
            {
                while (true)
                {
                    string entry = Console.ReadLine().ToLower();
                    switch (entry)
                    {
                    case "/help":
                        Print("------------------------------------------------------------------------------>");
                        Say("/status            - Shows the actual UCS status.");
                        Say("/clear             - Clears the console screen.");
                        Say("/gui               - Shows the UCS Graphical User Interface.");
                        Say("/restart           - Restarts UCS instantly.");
                        Say("/shutdown          - Shuts UCS down instantly.");
                        Say("/addpremium        - Add a Premium Player.");
                        Say("/banned            - Writes all Banned IP's into the Console.");
                        Say("/addip             - Add an IP to the Blacklist");
                        Say("/maintenance       - Begin Server Maintenance.");
                        Say("/saveall           - Saves everything to the Database");
                        Say("/dl csv            - Downloads latest CSV Files (if Fingerprint is up to Date).");
                        Say("/info              - Shows the UCS Informations.");
                        Say("/info 'command'    - More Info On a Command. Ex: /info gui");
                        Print("------------------------------------------------------------------------------>");
                        break;

                    case "/info":
                        Console.WriteLine("------------------------------------->");
                        Say("UCS Version:         " + Constants.Version);
                        Say("Build:               " + Constants.Build);
                        Say("LicenseID:           " + Constants.LicensePlanID);
                        Say("CoC Version from SC: " + VersionChecker.LatestCoCVersion());
                        Say("");
                        Say("©Ultrapowa 2014 - " + DateTime.Now.Year);
                        Console.WriteLine("------------------------------------->");
                        break;

                    case "/dl csv":
                        CSVManager.DownloadLatestCSVFiles();
                        break;

                    case "/banned":
                        Console.WriteLine("------------------------------------->");
                        Say("Banned IP Addresses:");
                        ConnectionBlocker.GetBannedIPs();
                        Console.WriteLine("------------------------------------->");
                        break;

                    case "/addip":
                        Console.WriteLine("------------------------------------->");
                        Console.Write("IP: ");
                        string s = Console.ReadLine();
                        ConnectionBlocker.AddNewIpToBlackList(s);
                        Console.WriteLine("------------------------------------->");
                        break;

                    case "/saveall":
                        Console.ForegroundColor = ConsoleColor.Yellow;
                        Console.WriteLine("----------------------------------------------------->");
                        Say("Starting saving of all Players... (" + ResourcesManager.GetInMemoryLevels().Count + ")");
                        DatabaseManager.Single().Save(ResourcesManager.GetInMemoryLevels()).Wait();
                        Say("Finished saving of all Players!");
                        Say("Starting saving of all Alliances... (" + ResourcesManager.GetInMemoryAlliances().Count + ")");
                        DatabaseManager.Single().Save(ResourcesManager.GetInMemoryAlliances()).Wait();
                        Say("Finished saving of all Alliances!");
                        Console.ForegroundColor = ConsoleColor.Yellow;
                        Console.WriteLine("----------------------------------------------------->");
                        Console.ResetColor();
                        break;

                    /*case "/addpremium":
                     *  Print("------------------------------------->");
                     *  Say("Type in now the Player ID: ");
                     *  var id = ReadLine();
                     *  Print("------------------------------------->");
                     *  try
                     *  {
                     *      var l = await ResourcesManager.GetPlayer(long.Parse(id));
                     *      var avatar = l.GetPlayerAvatar();
                     *      var playerID = avatar.GetId();
                     *      var p = avatar.GetPremium();
                     *      Say("Set the Privileges for Player: '" + avatar.GetAvatarName() + "' ID: '" + avatar.GetId() + "' to Premium?");
                     *      Say("Type in 'y':Yes or 'n': Cancel");
                     *      loop:
                     *      var a = ReadLine();
                     *      if (a == "y")
                     *      {
                     *          if (p == true)
                     *          {
                     *              Say("Privileges already set to 'Premium'");
                     *          }
                     *          else if (p == false)
                     *          {
                     *              ResourcesManager.GetPlayer(playerID).GetPlayerAvatar().SetPremium(true);
                     *              Say("Privileges set succesfully for: '" + avatar.GetAvatarName() + "' ID: '" + avatar.GetId() + "'");
                     *              DatabaseManager.Single().Save(ResourcesManager.GetInMemoryLevels());
                     *          }
                     *      }
                     *      else if (a == "n")
                     *      {
                     *          Say("Canceled.");
                     *      }
                     *      else
                     *      {
                     *          Error("Type in 'y':Yes or 'n': Cancel");
                     *          goto loop;
                     *      }
                     *  }
                     *  catch (NullReferenceException)
                     *  {
                     *      Say("Player doesn't exists!");
                     *  }
                     *  break;*/

                    case "/info addpremium":
                        Print("------------------------------------------------------------------------------->");
                        Say("/addpremium > Adds a Premium Player, which will get more Privileges.");
                        Print("------------------------------------------------------------------------------->");
                        break;

                    case "/maintenance":
                        StartMaintenance();
                        break;

                    case "/info maintenance":
                        Print("------------------------------------------------------------------------------>");
                        Say(@"/maintenance > Enables Maintenance which will do the following:");
                        Say(@"     - All Online Users will be notified (Attacks will be disabled),");
                        Say(@"     - All new connections get a Maintenace Message at the Login. ");
                        Say(@"     - After 5min all Players will be kicked.");
                        Say(@"     - After the Maintenance Players will be able to connect again.");
                        Print("------------------------------------------------------------------------------>");
                        break;

                    case "/status":
                        Print("------------------------------------------------------->");
                        Say("Status:                   " + "ONLINE");
                        Say("IP Address:               " +
                            Dns.GetHostByName(Dns.GetHostName()).AddressList[0]);
                        Say("Online Players:           " +
                            ResourcesManager.GetOnlinePlayers().Count);
                        Say("Connected Players:        " +
                            ResourcesManager.GetConnectedClients().Count);
                        Say("In Memory Players:        " +
                            ResourcesManager.GetInMemoryLevels().Count);
                        Say("In Memory Alliances:      " +
                            ResourcesManager.GetInMemoryAlliances().Count);
                        Say("Clash Version:            " + ConfigurationManager.AppSettings["ClientVersion"]);
                        Print("------------------------------------------------------->");
                        break;

                    case "/info status":
                        Print("----------------------------------------------------------------->");
                        Say(@"/status > Shows current state of server including:");
                        Say(@"     - Online Status");
                        Say(@"     - Server IP Address");
                        Say(@"     - Amount of Online Players");
                        Say(@"     - Amount of Connected Players");
                        Say(@"     - Amount of Players in Memory");
                        Say(@"     - Amount of Alliances in Memory");
                        Say(@"     - Clash of Clans Version.");
                        Print("----------------------------------------------------------------->");
                        break;

                    case "/clear":
                        Clear();
                        break;

                    case "/shutdown":
                        UCSControl.UCSClose();
                        break;

                    case "/info shutdown":
                        Print("---------------------------------------------------------------------------->");
                        Say(@"/shutdown > Shuts Down UCS instantly after doing the following:");
                        Say(@"     - Throws all Players an 'Client Out of Sync Message'");
                        Say(@"     - Disconnects All Players From the Server");
                        Say(@"     - Saves all Players in Database");
                        Say(@"     - Shutsdown UCS.");
                        Print("---------------------------------------------------------------------------->");
                        break;

                    case "/gui":
                        Application.Run(new UCSUI());
                        break;

                    case "/info gui":
                        Print("------------------------------------------------------------------------------->");
                        Say(@"/gui > Starts the UCS Gui which includes many features listed here:");
                        Say(@"     - Status Controler/Manager");
                        Say(@"     - Player Editor");
                        Say(@"     - Config.UCS editor.");
                        Print("------------------------------------------------------------------------------->");
                        break;

                    case "/restart":
                        UCSControl.UCSRestart();
                        break;

                    case "/info restart":
                        Print("---------------------------------------------------------------------------->");
                        Say(@"/shutdown > Restarts UCS instantly after doing the following:");
                        Say(@"     - Throws all Players an 'Client Out of Sync Message'");
                        Say(@"     - Disconnects All Players From the Server");
                        Say(@"     - Saves all Players in Database");
                        Say(@"     - Restarts UCS.");
                        Print("---------------------------------------------------------------------------->");
                        break;

                    default:
                        Say("Unknown command, type \"/help\" for a list containing all available commands.");
                        break;
                    }
                }
            }));
            T.Start();
        }
Beispiel #9
0
        static ParserThread()
        {
            T = new Thread((ThreadStart)(() =>
            {
                while (true)
                {
                    string entry = Console.ReadLine().ToLower();
                    switch (entry)
                    {
                    case "/help":
                        Print("------------------------------------------------------------------------------>");
                        Say("/status            - Shows the actual UCS status.");
                        Say("/clear             - Clears the console screen.");
                        Say("/gui               - Shows the UCS Graphical User Interface.");
                        Say("/restart           - Restarts UCS instantly.");
                        Say("/shutdown          - Shuts UCS down instantly.");
                        Say("/banned            - Writes all Banned IP's into the Console.");
                        Say("/addip             - Add an IP to the Blacklist");
                        Say("/maintenance       - Begin Server Maintenance.");
                        Say("/saveall           - Saves everything in memory to the Database");
                        Say("/dl csv            - Downloads latest CSV Files (if Fingerprint is up to Date).");
                        Say("/info              - Shows the UCS Informations.");
                        Say("/info 'command'    - More Info On a Command. Ex: /info gui");
                        Print("------------------------------------------------------------------------------>");
                        break;

                    case "/info":
                        Console.WriteLine("------------------------------------->");
                        Say($"UCS Version:         {Constants.Version}");
                        Say($"Build:               {Constants.Build}");
                        Say($"LicenseID:           {Constants.LicensePlanID}");
                        Say($"CoC Version from SC: {VersionChecker.LatestCoCVersion()}");
                        Say($"Ultrapower  - {DateTime.Now.Year}");
                        Console.WriteLine("------------------------------------->");
                        break;

                    case "/dl csv":
                        CSVManager.DownloadLatestCSVFiles();
                        break;

                    case "/info dl csv":
                        Print("------------------------------------------------------------------------------>");
                        Say(@"/dl csv > Downloads COC Assets such as CSVs and if enabled:");
                        Say(@"     - Logic,");
                        Say(@"     - Sound Files ");
                        Say(@"     - SCs");
                        Print("------------------------------------------------------------------------------>");
                        break;

                    case "/banned":
                        Console.WriteLine("------------------------------------->");
                        Say("Banned IP Addresses:");
                        ConnectionBlocker.GetBannedIPs();
                        Console.WriteLine("------------------------------------->");
                        break;

                    case "/addip":
                        Console.WriteLine("------------------------------------->");
                        Console.Write("IP: ");
                        string s = Console.ReadLine();
                        ConnectionBlocker.AddNewIpToBlackList(s);
                        Console.WriteLine("------------------------------------->");
                        break;

                    case "/saveall":
                        Console.ForegroundColor = ConsoleColor.Yellow;
                        Console.WriteLine("----------------------------------------------------->");
                        Say($"Starting saving of all Players... ({ResourcesManager.m_vInMemoryLevels.Count})");
                        Resources.DatabaseManager.Save(ResourcesManager.m_vInMemoryLevels.Values.ToList()).Wait();
                        Say("Finished saving of all Players!");
                        Say($"Starting saving of all Alliances... ({ResourcesManager.GetInMemoryAlliances().Count})");
                        Resources.DatabaseManager.Save(ResourcesManager.GetInMemoryAlliances()).Wait();
                        Say("Finished saving of all Alliances!");
                        Console.ForegroundColor = ConsoleColor.Yellow;
                        Console.WriteLine("----------------------------------------------------->");
                        Console.ResetColor();
                        break;



                    case "/maintenance":
                        StartMaintenance();
                        break;

                    case "/info maintenance":
                        Print("------------------------------------------------------------------------------>");
                        Say(@"/maintenance > Enables Maintenance which will do the following:");
                        Say(@"     - All Online Users will be notified (Attacks will be disabled),");
                        Say(@"     - All new connections get a Maintenace Message at the Login. ");
                        Say(@"     - After 5min all Players will be kicked.");
                        Say(@"     - After the Maintenance Players will be able to connect again.");
                        Print("------------------------------------------------------------------------------>");
                        break;

                    case "/status":
                        Say($"Please wait retrieving Ultrapower Server status");
                        ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_PerfFormattedData_PerfOS_Processor");
                        var cpuTimes = searcher.Get()
                                       .Cast <ManagementObject>()
                                       .Select(mo => new
                        {
                            Name = mo["Name"],
                            Usage = mo["PercentProcessorTime"]
                        }
                                               )
                                       .ToList();
                        var query = cpuTimes.Where(x => x.Name.ToString() == "_Total").Select(x => x.Usage);
                        var CPUParcentage = query.SingleOrDefault();
                        Print("------------------------------------------------------->");
                        Say($"CPU Usage:                {CPUParcentage}%");
                        Say($"RAM Usage:                {Performances.GetUsedMemory()}%");
                        Say($"Time:                     {DateTime.Now}");
                        Say($"IP Address:               {Dns.GetHostByName(Dns.GetHostName()).AddressList[0]}");
                        Say($"Online Players:           {ResourcesManager.m_vOnlinePlayers.Count}");
                        Say($"Connected Players:        {ResourcesManager.GetConnectedClients().Count}");
                        Say($"In Memory Players:        {ResourcesManager.m_vInMemoryLevels.Values.ToList().Count}");
                        Say($"In Memory Alliances:      {ResourcesManager.GetInMemoryAlliances().Count}");
                        Say($"Client Version:           {ConfigurationManager.AppSettings["ClientVersion"]}");
                        Print("------------------------------------------------------->");
                        break;

                    case "/info status":
                        Print("----------------------------------------------------------------->");
                        Say(@"/status > Shows current state of server including:");
                        Say(@"     - Online Status");
                        Say(@"     - Server IP Address");
                        Say(@"     - Amount of Online Players");
                        Say(@"     - Amount of Connected Players");
                        Say(@"     - Amount of Players in Memory");
                        Say(@"     - Amount of Alliances in Memory");
                        Say(@"     - Clash of Clans Version.");
                        Print("----------------------------------------------------------------->");
                        break;

                    case "/clear":
                        Clear();
                        break;

                    case "/info shutdown":
                        Print("---------------------------------------------------------------------------->");
                        Say(@"/shutdown > Shuts Down UCS instantly after doing the following:");
                        Say(@"     - Throws all Players an 'Client Out of Sync Message'");
                        Say(@"     - Disconnects All Players From the Server");
                        Say(@"     - Saves all Players in Database");
                        Say(@"     - Shutsdown UCS.");
                        Print("---------------------------------------------------------------------------->");
                        break;

                    case "/gui":
                        Application.Run(new UCSUI());
                        break;

                    case "/info gui":
                        Print("------------------------------------------------------------------------------->");
                        Say(@"/gui > Starts the UCS Gui which includes many features listed here:");
                        Say(@"     - Status Controler/Manager");
                        Say(@"     - Player Editor");
                        Say(@"     - Config.UCS editor.");
                        Print("------------------------------------------------------------------------------->");
                        break;

                    case "/restart":
                        UCSControl.UCSRestart();
                        break;

                    case "/shutdown":
                        UCSControl.UCSClose();
                        break;

                    case "/info restart":
                        Print("---------------------------------------------------------------------------->");
                        Say(@"/restart > Restarts UCS instantly after doing the following:");
                        Say(@"     - Throws all Players an 'Client Out of Sync Message'");
                        Say(@"     - Disconnects All Players From the Server");
                        Say(@"     - Saves all Players in Database");
                        Say(@"     - Restarts UCS.");
                        Print("---------------------------------------------------------------------------->");
                        break;

                    default:
                        Say("Unknown command, type \"/help\" for a list containing all available commands.");
                        break;
                    }
                }
            }));
            T.Start();
        }