Implemented statistics. Refactored storage abstractions. Added config options for docker and local storage. Added server service and server updating.
This commit is contained in:
67
MoonlightServers.Daemon/Services/ServerService.cs
Normal file
67
MoonlightServers.Daemon/Services/ServerService.cs
Normal file
@@ -0,0 +1,67 @@
|
||||
using System.Collections.Concurrent;
|
||||
using MoonlightServers.Daemon.ServerSystem;
|
||||
|
||||
namespace MoonlightServers.Daemon.Services;
|
||||
|
||||
public class ServerService : IAsyncDisposable
|
||||
{
|
||||
private readonly ServerFactory ServerFactory;
|
||||
private readonly ConcurrentDictionary<string, Server> Servers = new();
|
||||
private readonly ILogger<ServerService> Logger;
|
||||
|
||||
public ServerService(ServerFactory serverFactory, ILogger<ServerService> logger)
|
||||
{
|
||||
ServerFactory = serverFactory;
|
||||
Logger = logger;
|
||||
}
|
||||
|
||||
public async Task SyncAsync(string uuid)
|
||||
{
|
||||
if (Servers.TryGetValue(uuid, out var server))
|
||||
{
|
||||
Logger.LogTrace("Updating existing server {uuid}", uuid);
|
||||
|
||||
await server.UpdateAsync();
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.LogTrace("Creating new server instance {uuid}", uuid);
|
||||
|
||||
var newServer = await ServerFactory.CreateAsync(uuid);
|
||||
await newServer.InitializeAsync();
|
||||
|
||||
Servers[uuid] = newServer;
|
||||
}
|
||||
}
|
||||
|
||||
public Task<Server?> GetAsync(string uuid)
|
||||
{
|
||||
var server = Servers.GetValueOrDefault(uuid);
|
||||
return Task.FromResult(server);
|
||||
}
|
||||
|
||||
public async Task DeleteAsync(string uuid)
|
||||
{
|
||||
Logger.LogTrace("Deleting server {uuid}", uuid);
|
||||
|
||||
var server = Servers.GetValueOrDefault(uuid);
|
||||
|
||||
if(server == null)
|
||||
return;
|
||||
|
||||
// Trigger internal deletion mechanism
|
||||
await server.DeleteAsync();
|
||||
|
||||
// Dispose any left over resources
|
||||
await server.DisposeAsync();
|
||||
|
||||
// Remove server from cache
|
||||
Servers.TryRemove(uuid, out _);
|
||||
}
|
||||
|
||||
public async ValueTask DisposeAsync()
|
||||
{
|
||||
foreach (var server in Servers)
|
||||
await server.Value.DisposeAsync();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user