using System.Collections.Concurrent; using HermesSocketLibrary.db; using HermesSocketLibrary.Requests.Messages; using HermesSocketServer.Store.Internal; namespace HermesSocketServer.Store { public class EmoteStore : AutoSavedStore { private readonly string _userId; private readonly Database _database; private readonly Serilog.ILogger _logger; public EmoteStore(string userId, DatabaseTable table, Database database, Serilog.ILogger logger) : base(table, database, logger) { _userId = userId; _database = database; _logger = logger; } public override async Task Load() { var emotes = new List(); var data = new Dictionary() { { "user", _userId } }; string sql = $"SELECT id, name FROM \"Emote\" WHERE \"userId\" = @user"; await _database.Execute(sql, data, (reader) => { var id = reader.GetString(0); var name = reader.GetString(1); _store.Add(id, new EmoteInfo() { Id = id, UserId = _userId, Name = name, }); emotes.Add(new EmoteInfo() { Id = id, Name = name, UserId = _userId }); }); _logger.Information($"Loaded {_store.Count} emotes from database."); } protected override void OnInitialAdd(string key, EmoteInfo value) { ArgumentException.ThrowIfNullOrWhiteSpace(key, nameof(key)); ArgumentNullException.ThrowIfNull(value, nameof(value)); ArgumentException.ThrowIfNullOrWhiteSpace(value.UserId, nameof(value.UserId)); ArgumentException.ThrowIfNullOrWhiteSpace(value.Name, nameof(value.Name)); } protected override void OnInitialModify(string key, EmoteInfo oldValue, EmoteInfo newValue) { ArgumentNullException.ThrowIfNull(newValue, nameof(newValue)); ArgumentException.ThrowIfNullOrWhiteSpace(newValue.UserId, nameof(newValue.UserId)); ArgumentException.ThrowIfNullOrWhiteSpace(newValue.Name, nameof(newValue.Name)); } protected override void OnPostRemove(string key, EmoteInfo value) { } } }