/// <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); }
/// <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); }
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); }
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); }
/// <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); }