Example #1
0
        /// <summary>
        /// Loads the specified account.
        /// </summary>
        internal Account LoadAccount(int HighID, int LowID, string PassToken, DBMS Database = Constants.Database)
        {
            if (!this.TryGetValue((long)HighID << 32 | (uint)LowID, out Account Account))
            {
                switch (Database)
                {
                case DBMS.Mongo:
                {
                    Core.Database.Models.Mongo.Players Save = Mongo.Players.Find(T => T.HighID == HighID && T.LowID == LowID && T.PassToken == PassToken).SingleOrDefault();

                    if (Save != null)
                    {
                        Player Player = this.LoadPlayerFromSave(Save.Player.ToJson());
                        Home   Home   = this.LoadHomeFromSave(Save.Home.ToJson());

                        if (Player == null || Home == null)
                        {
                            Logging.Error(this.GetType(), "Unable to load account id:" + HighID + "-" + LowID + ".");
                            return(new Account(-1, -1, string.Empty, null, null));
                        }

                        Account = new Account(HighID, LowID, PassToken, Player, Home);
                    }

                    break;
                }
                }
            }

            return(Account);
        }
Example #2
0
        /// <summary>
        /// Loads the specified account.
        /// </summary>
        internal async Task <Account> LoadAccountAsync(int HighID, int LowID, string PassToken, DBMS Database = Constants.Database, bool Store = true)
        {
            long ID = (long)HighID << 32 | (uint)LowID;

            if (!this.TryGetValue((long)HighID << 32 | (uint)LowID, out Account Account))
            {
                switch (Database)
                {
                case DBMS.Mongo:
                {
                    Core.Database.Models.Mongo.Players Save = await Mongo.Players.Find(T => T.HighID == HighID && T.LowID == LowID && T.PassToken == PassToken).SingleOrDefaultAsync();

                    if (Save != null)
                    {
                        if (!this.Players.TryGetValue(ID, out Player Player))
                        {
                            Player = this.LoadPlayerFromSave(Save.Player.ToJson());

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

                        if (!this.Homes.TryGetValue(ID, out Home Home))
                        {
                            Home = this.LoadHomeFromSave(Save.Home.ToJson());

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

                        Account.HighID    = Save.HighID;
                        Account.LowID     = Save.LowID;
                        Account.PassToken = Save.PassToken;
                        Account.Player    = Player;
                        Account.Home      = Home;

                        if (Player == null || Home == null)
                        {
                            Logging.Error(this.GetType(), "Unable to load account id:" + HighID + "-" + LowID + ".");
                            return(Account);
                        }

                        this.TryAdd(ID, Account);
                    }

                    break;
                }
                }
            }

            return(Account);
        }
Example #3
0
        internal async Task <Player> FindPlayer(Expression <Func <Core.Database.Models.Mongo.Players, bool> > Filters)
        {
            Core.Database.Models.Mongo.Players Result = Mongo.Players.Find(Filters).Limit(1).SingleOrDefault();

            if (Result != null)
            {
                if (Result.Player != null)
                {
                    return(JsonConvert.DeserializeObject <Player>(Result.Player.ToJson(), this.Settings));
                }
            }

            return(null);
        }
Example #4
0
        internal async Task <Home> LoadHomeAsync(int HighID, int LowID, DBMS Database = Constants.Database, bool Store = true)
        {
            long ID = (long)HighID << 32 | (uint)LowID;

            if (!this.Homes.TryGetValue(ID, out Home Home))
            {
                switch (Database)
                {
                case DBMS.Mongo:
                {
                    Core.Database.Models.Mongo.Players Save = await Mongo.Players.Find(T => T.HighID == HighID && T.LowID == LowID).SingleOrDefaultAsync();

                    if (Save != null)
                    {
                        Home = this.LoadHomeFromSave(Save.Home.ToJson());

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

                        if (!this.Players.TryGetValue(ID, out Player Player))
                        {
                            Player = this.LoadPlayerFromSave(Save.Player.ToJson());

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

                        if (Home == null)
                        {
                            Logging.Error(this.GetType(), "Unable to load home id:" + HighID + "-" + LowID + ".");
                            return(null);
                        }
                    }

                    break;
                }
                }
            }

            return(Home);
        }
Example #5
0
        /// <summary>
        /// Gets the player using the specified identifier in the specified database.
        /// </summary>
        /// <param name="Device">The device.</param>
        /// <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 async Task <Player> Get(Device Device, int HighID, int LowID, DBMS DBMS = Constants.Database, bool Store = true)
        {
            long Id = (long)HighID << 32 | (uint)LowID;

            if (!this.TryGetValue(Id, out Player Player))
            {
                switch (DBMS)
                {
                case DBMS.MySQL:
                {
                    using (GBS_MySQL Database = new GBS_MySQL())
                    {
                        var Data = await Database.Players.FindAsync(HighID, LowID);

                        if (Data != null)
                        {
                            if (!string.IsNullOrEmpty(Data.Data))
                            {
                                Player        = JsonConvert.DeserializeObject <Player>(Data.Data, this.Settings);
                                Player.Device = Device;
                                Device.Player = Player;

                                if (Store)
                                {
                                    this.Add(Player);
                                }
                            }
                            else
                            {
                                Logging.Error(this.GetType(), "The data returned wasn't null but empty, at Get(" + HighID + ", " + LowID + ", MySQL, " + Store + ").");
                            }
                        }
                    }

                    break;
                }

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

                    if (!string.IsNullOrEmpty(Data))
                    {
                        Player        = JsonConvert.DeserializeObject <Player>(Data, this.Settings);
                        Player.Device = Device;
                        Device.Player = Player;

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

                    break;
                }

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

                    if (Player == null)
                    {
                        Player = await this.Get(Device, 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        = JsonConvert.DeserializeObject <Player>(JSON, this.Settings);
                            Player.Device = Device;
                            Device.Player = Player;
                        }
                        else
                        {
                            Logging.Error(this.GetType(), "The data returned wasn't null but empty, at Get(" + HighID + ", " + LowID + ", File, " + Store + ").");
                        }
                    }

                    break;
                }

                case DBMS.Mongo:
                {
                    Core.Database.Models.Mongo.Players Save = await Mongo.Players.Find(T => T.HighID == HighID && T.LowID == LowID).Limit(1).SingleOrDefaultAsync();

                    if (Save != null)
                    {
                        Player        = JsonConvert.DeserializeObject <Player>(Save.Player.ToJson(), this.Settings);
                        Player.Device = Device;
                        Device.Player = Player;

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

                    break;
                }
                }
            }

            return(Player);
        }