Example #1
0
        /// <summary>
        /// Exits the handler.
        /// </summary>
        private void ExitHandler()
        {
            /* TODO: Set the Server in Maintenance Mode for 10 minutes.
             * TODO: Save all players...
             * TODO: Save all alliances...
             * TODO: Clean Up the Memcached Server.
             * TODO: Close. */
            Debug.Write("The Server is currently saving all players and clans, before shutting down.");
            this.Logger.Debug("The Server is currently saving all players and clans, before shutting down.");

            using (GRS_MySQL Database = new GRS_MySQL())
            {
                foreach (ClientAvatar _Player in ResourcesManager.Players.Values)
                {
                    Players _Data = Database.Players.Find(_Player.GetId());

                    _Data.Status  = (int)_Player.GetStatus();
                    _Data.Rank    = (int)_Player.GetRank();
                    _Data.Avatar  = _Player.Serialize().ToString();
                    _Data.Objects = _Player.Deck.Serialize().ToString();
                }

                Database.SaveChanges();
            }
        }
        /// <summary>
        /// Saves the specified alliance.
        /// </summary>
        public async void SaveAlliance(int HighID, int LowID, string JSON)
        {
            using (GRS_MySQL MySQL = new GRS_MySQL())
            {
                var Save = await MySQL.Alliances.FindAsync(HighID, LowID);

                if (Save != null)
                {
                    Save.Data = JSON;
                }

                MySQL.SaveChangesAsync();
            }
        }
        /// <summary>
        /// Loads and returns the specified alliance.
        /// </summary>
        public async Task <string> LoadAllianceAsync(int HighID, int LowID)
        {
            using (GRS_MySQL MySQL = new GRS_MySQL())
            {
                var Save = await MySQL.Alliances.FindAsync(HighID, LowID);

                if (Save != null)
                {
                    return(Save.Data);
                }
            }

            return(null);
        }
        /// <summary>
        /// Loads and returns the specified alliance.
        /// </summary>
        public string LoadAlliance(int HighID, int LowID)
        {
            using (GRS_MySQL MySQL = new GRS_MySQL())
            {
                var Save = MySQL.Alliances.Find(HighID, LowID);

                if (Save != null)
                {
                    return(Save.Data);
                }
            }

            return(null);
        }
        /// <summary>
        /// Loads and returns the specified player.
        /// </summary>
        public async Task <string> LoadPlayerAsync(int HighID, int LowID, string NotUsed)
        {
            using (GRS_MySQL MySQL = new GRS_MySQL())
            {
                var Save = await MySQL.Players.FindAsync(HighID, LowID);

                if (Save != null)
                {
                    return(Save.Data);
                }
            }

            return(null);
        }
        /// <summary>
        /// Loads and returns the specified player.
        /// </summary>
        public string LoadPlayer(int HighID, int LowID, string NotUsed)
        {
            using (GRS_MySQL MySQL = new GRS_MySQL())
            {
                var Save = MySQL.Players.Find(HighID, LowID);

                if (Save != null)
                {
                    return(Save.Data);
                }
            }

            return(null);
        }
        /// <summary>
        /// Creates a player document in database.
        /// </summary>
        public void CreatePlayer(int HighID, int LowID, string JSON)
        {
            if (!string.IsNullOrEmpty(JSON))
            {
                using (GRS_MySQL MySQL = new GRS_MySQL())
                {
                    MySQL.Players.Add(new Players
                    {
                        HighID = HighID,
                        LowID  = LowID,
                        Data   = JSON
                    });

                    MySQL.SaveChanges();
                }
            }
        }
Example #8
0
        /// <summary>
        /// Saves the specified player in the specified database.
        /// </summary>
        /// <param name="Player">The player.</param>
        /// <param name="DBMS">The DBMS.</param>
        internal void Save(Player Player, DBMS DBMS = Constants.Database)
        {
            return;

            switch (DBMS)
            {
            case DBMS.MySQL:
            {
                using (GRS_MySQL Database = new GRS_MySQL())
                {
                    Core.Database.Models.Players Data = Database.Players.Find(Player.HighID, Player.LowID);

                    if (Data != null)
                    {
                        Data.HighID = Player.HighID;
                        Data.LowID  = Player.LowID;
                        Data.Data   = JsonConvert.SerializeObject(Player, this.Settings);
                    }

                    Database.SaveChangesAsync();
                }

                break;
            }

            case DBMS.Redis:
            {
                Redis.Players.StringSetAsync(Player.ToString(), JsonConvert.SerializeObject(Player, this.Settings), TimeSpan.FromMinutes(30));
                break;
            }

            case DBMS.Both:
            {
                this.Save(Player, DBMS.MySQL);
                this.Save(Player, DBMS.Redis);
                break;
            }

            case DBMS.File:
            {
                File.WriteAllText(Directory.GetCurrentDirectory() + "\\Saves\\Players\\" + Player + ".json", JsonConvert.SerializeObject(Player, this.Settings));
                break;
            }
            }
        }
Example #9
0
        /// <summary>
        /// Deletes the specified player in the specified database.
        /// </summary>
        /// <param name="Player">The player.</param>
        /// <param name="DBMS">The DBMS.</param>
        internal void Delete(int HighID, int LowID, DBMS DBMS = Constants.Database)
        {
            switch (DBMS)
            {
            case DBMS.MySQL:
            {
                using (GRS_MySQL Database = new GRS_MySQL())
                {
                    Core.Database.Models.Players Data = Database.Players.Find(HighID, LowID);

                    if (Data != null)
                    {
                        Database.Players.Remove(Data);
                    }

                    Database.SaveChangesAsync();
                }

                break;
            }

            case DBMS.Redis:
            {
                Redis.Players.KeyDeleteAsync(HighID + "-" + LowID);
                break;
            }

            case DBMS.Both:
            {
                this.Delete(HighID, LowID, DBMS.MySQL);
                this.Delete(HighID, LowID, DBMS.Redis);
                break;
            }

            case DBMS.File:
            {
                File.Delete(Directory.GetCurrentDirectory() + "\\Saves\\Players\\" + HighID + "-" + LowID + ".json");
                break;
            }
            }
        }
Example #10
0
        /// <summary>
        /// Gets the player using the specified identifier in the specified database.
        /// </summary>
        /// <param name="HighID">The high identifier.</param>
        /// <param name="LowID">The low identifier.</param>
        /// <param name="DBMS">The DBMS.</param>
        /// <param name="Store">if set to <c>true</c> [store].</param>
        internal Player Get(int HighID, int LowID, DBMS DBMS = Constants.Database, bool Store = true)
        {
            if (!this.ContainsKey((HighID, LowID).ToInt64()))
            {
                Player Player = null;

                switch (DBMS)
                {
                case DBMS.MySQL:
                {
                    using (GRS_MySQL Database = new GRS_MySQL())
                    {
                        Core.Database.Models.Players Data = Database.Players.Find(HighID, LowID);

                        if (Data != null)
                        {
                            if (!string.IsNullOrEmpty(Data.Data))
                            {
                                Player = new Player(null, HighID, LowID);

                                JsonConvert.PopulateObject(Data.Data, Player, this.Settings);

                                if (Store)
                                {
                                    this.Add(Player);
                                }
                            }
                        }
                    }

                    break;
                }

                case DBMS.Redis:
                {
                    string Data = Redis.Players.StringGet(HighID + "-" + LowID).ToString();

                    if (!string.IsNullOrEmpty(Data))
                    {
                        Player = new Player(null, HighID, LowID);

                        JsonConvert.PopulateObject(Data, Player, this.Settings);

                        if (Store)
                        {
                            this.Add(Player);
                        }
                    }

                    break;
                }

                case DBMS.Both:
                {
                    Player = this.Get(HighID, LowID, DBMS.Redis, Store);

                    if (Player == null)
                    {
                        Player = this.Get(HighID, LowID, DBMS.MySQL, Store);

                        if (Player != null)
                        {
                            this.Save(Player, DBMS.Redis);
                        }
                    }

                    break;
                }

                case DBMS.File:
                {
                    if (File.Exists(Directory.GetCurrentDirectory() + "\\Saves\\Players\\" + HighID + "-" + LowID + ".json"))
                    {
                        string JSON = File.ReadAllText(Directory.GetCurrentDirectory() + "\\Saves\\Players\\" + HighID + "-" + LowID + ".json");

                        if (!string.IsNullOrWhiteSpace(JSON))
                        {
                            Player = new Player(null, HighID, LowID);

                            JsonConvert.PopulateObject(JSON, Player, this.Settings);
                        }
                    }

                    break;
                }
                }

                return(Player);
            }

            return(this[LowID]);
        }
Example #11
0
        /// <summary>
        /// Creates a new player using the specified identifier in the specified database.
        /// </summary>
        /// <param name="HighID">The high identifier.</param>
        /// <param name="LowID">The low identifier.</param>
        /// <param name="DBMS">The DBMS.</param>
        /// <param name="Store">if set to <c>true</c> [store].</param>
        internal Player New(int HighID = Constants.ServerID, int LowID = 0, DBMS DBMS = Constants.Database, bool Store = true)
        {
            Player Player = null;

            if (LowID == 0)
            {
                lock (this.Gate)
                {
                    Player = new Player(null, HighID, this.Seed++);
                }
            }
            else
            {
                Player = new Player(null, HighID, LowID);
            }

            JsonConvert.PopulateObject(Files.Home.Starting_Home, Player.Objects, this.Settings);

            for (int i = 0; i < 20; i++)
            {
                char Letter = (char)Core.Resources.Random.Next('A', 'Z');
                Player.Token = Player.Token + Letter;
            }

            switch (DBMS)
            {
            case DBMS.MySQL:
            {
                using (GRS_MySQL Database = new GRS_MySQL())
                {
                    Database.Players.Add(new Core.Database.Models.Players
                        {
                            HighID = Player.HighID,
                            LowID  = Player.LowID,
                            Data   = JsonConvert.SerializeObject(Player, this.Settings)
                        });

                    Database.SaveChangesAsync();
                }

                if (Store)
                {
                    this.Add(Player);
                }

                break;
            }

            case DBMS.Redis:
            {
                this.Save(Player, DBMS);

                if (Store)
                {
                    this.Add(Player);
                }

                break;
            }

            case DBMS.Both:
            {
                this.Save(Player, DBMS);

                using (GRS_MySQL Database = new GRS_MySQL())
                {
                    Database.Players.Add(new Core.Database.Models.Players
                        {
                            HighID = Player.HighID,
                            LowID  = Player.LowID,
                            Data   = JsonConvert.SerializeObject(Player, this.Settings)
                        });

                    Database.SaveChangesAsync();
                }

                if (Store)
                {
                    this.Add(Player);
                }

                break;
            }

            case DBMS.File:
            {
                if (!File.Exists(Directory.GetCurrentDirectory() + "\\Saves\\Players\\" + Player + ".json"))
                {
                    File.WriteAllText(Directory.GetCurrentDirectory() + "\\Saves\\Players\\" + Player + ".json", JsonConvert.SerializeObject(Player, this.Settings));
                }

                break;
            }
            }

            return(Player);
        }