public LimiterManager(IDbConnection db) { this.db = db; var sql = new SqlTableCreator(db, db.GetSqlType() == SqlType.Sqlite ? (IQueryBuilder) new SqliteQueryCreator() : (IQueryBuilder) new MysqlQueryCreator()); sql.EnsureTableStructure(new SqlTable("Limiters", new SqlColumn("AccountName", MySqlDbType.VarChar, 32) { Primary = true }, new SqlColumn("Chests", MySqlDbType.Text), new SqlColumn(db.GetSqlType() == SqlType.Mysql ? "`Limit`" : "Limit", MySqlDbType.Int32) )); using (var result = db.QueryReader("SELECT * FROM `Limiters`")) { while (result.Read()) { Limiter limiter = new Limiter(result.Get <string>("AccountName"), result.Get <int>("Limit")); limiter.LoadChests(result.Get <string>("Chests")); limiters.Add(limiter); } } }
public Task <ReturnTypes> UpdateChests(string accountName, List <int> value) { return(Task.Run <ReturnTypes>(() => { try { lock (syncLock) { Limiter limiter = limiters.Find(l => l.AccountName == accountName); if (limiter == null) { return ReturnTypes.NullOrCorrupt; } limiter.Chests = value; return db.Query("UPDATE `Limiters` SET `Chests` = @1 WHERE `AccountName` = @0", accountName, value.Serialize()) == 1 ? ReturnTypes.Success : ReturnTypes.NullOrCorrupt; } } catch (Exception ex) { TShock.Log.Error(ex.ToString()); return ReturnTypes.Exception; } })); }
public Task <ReturnTypes> UpdateLimit(string accountName, int value) { return(Task.Run(() => { try { lock (syncLock) { Limiter limiter = limiters.Find(l => l.AccountName == accountName); if (limiter == null) { return ReturnTypes.NullOrCorrupt; } limiter.Limit = value; return db.Query("UPDATE `Limiters` SET `Limit` = @1 WHERE `AccountName` = @0", accountName, value) == 1 ? ReturnTypes.Success : ReturnTypes.NullOrCorrupt; } } catch (Exception ex) { TShock.Log.ConsoleError(ex.ToString()); return ReturnTypes.Exception; } })); }
public Task <ReturnTypes> ReloadAsync() { return(Task.Run(() => { try { lock (syncLock) { limiters.Clear(); using (var result = db.QueryReader("SELECT * FROM `Limiters`")) { while (result.Read()) { Limiter limiter = new Limiter(result.Get <string>("AccountName"), result.Get <int>("Limit")); limiter.LoadChests(result.Get <string>("Chests")); limiters.Add(limiter); } } return ReturnTypes.Success; } } catch (Exception ex) { TShock.Log.ConsoleError(ex.ToString()); return ReturnTypes.Exception; } })); }
public Task <ReturnTypes> AddAsync(Limiter value) { return(Task.Run(() => { try { lock (syncLock) { limiters.Add(value); return db.Query("INSERT INTO `Limiters` (`AccountName`, `Chests`, `Limit`) VALUES (@0, @1, @2)", value.AccountName, value.Chests.Serialize(), value.Limit) == 1 ? ReturnTypes.Success : ReturnTypes.NullOrCorrupt; } } catch (Exception ex) { TShock.Log.Error(ex.ToString()); return ReturnTypes.Exception; } })); }