Redid stores. Added user store. Added Channel Manager, to manage data from a single channel.

This commit is contained in:
Tom
2024-10-19 01:50:46 +00:00
parent 3f3ba63554
commit 4d0b38babd
22 changed files with 654 additions and 475 deletions

View File

@@ -0,0 +1,56 @@
using System.Collections.Concurrent;
using HermesSocketLibrary.db;
using HermesSocketServer.Models;
using HermesSocketServer.Store;
namespace HermesSocketServer.Services
{
public class ChannelManager
{
private readonly UserStore _users;
private readonly Database _database;
private readonly Serilog.ILogger _logger;
private readonly IDictionary<string, Channel> _channels;
public ChannelManager(UserStore users, Database database, Serilog.ILogger logger)
{
_users = users;
_database = database;
_logger = logger;
_channels = new ConcurrentDictionary<string, Channel>();
}
public async Task Add(string userId)
{
var user = _users.Get(userId);
if (user == null)
{
return;
}
if (_channels.ContainsKey(userId))
{
return;
}
var chatters = new ChatterStore(userId, _database, _logger);
await chatters.Load();
var channel = new Channel()
{
Id = userId,
User = user,
Chatters = chatters
};
_channels.Add(userId, channel);
}
public Channel? Get(string channelId)
{
if (_channels.TryGetValue(channelId, out var channel))
return channel;
return null;
}
}
}

View File

@@ -5,13 +5,14 @@ namespace HermesSocketServer.Services
public class DatabaseService : BackgroundService
{
private readonly VoiceStore _voices;
private readonly ChatterStore _chatters;
private readonly UserStore _users;
private readonly ServerConfiguration _configuration;
private readonly Serilog.ILogger _logger;
public DatabaseService(VoiceStore voices, ChatterStore chatters, ServerConfiguration configuration, Serilog.ILogger logger) {
public DatabaseService(VoiceStore voices, UserStore users, ServerConfiguration configuration, Serilog.ILogger logger)
{
_voices = voices;
_chatters = chatters;
_users = users;
_configuration = configuration;
_logger = logger;
}
@@ -20,16 +21,19 @@ namespace HermesSocketServer.Services
{
_logger.Information("Loading TTS voices...");
await _voices.Load();
_logger.Information("Loading TTS chatters' voice.");
await _chatters.Load();
_logger.Information("Loading users...");
await _users.Load();
await Task.Run(async () =>
{
var tasks = new List<Task>();
await Task.Delay(TimeSpan.FromSeconds(_configuration.Database.SaveDelayInSeconds));
while (true)
{
await Task.Delay(TimeSpan.FromSeconds(_configuration.Database.SaveDelayInSeconds));
await _voices.Save();
await _chatters.Save();
tasks.Add(_voices.Save());
tasks.Add(_users.Save());
tasks.Add(Task.Delay(TimeSpan.FromSeconds(_configuration.Database.SaveDelayInSeconds)));
await Task.WhenAll(tasks);
}
});
}