Implemented statistics. Refactored storage abstractions. Added config options for docker and local storage. Added server service and server updating.
This commit is contained in:
@@ -44,7 +44,7 @@ public class ServerConfigurationService
|
||||
return new InstallConfiguration(
|
||||
"bash",
|
||||
"installer",
|
||||
await File.ReadAllTextAsync("/home/chiara/Documents/daemonScripts/install.sh")
|
||||
"#!/bin/bash\n# Paper Installation Script\n#\necho -e \"Started Installation\"\n\n# Server Files: /mnt/server\nPROJECT=paper\n\nif [ \"${MINECRAFT_VERSION}\" == \"latest\" ]; then\n LATEST_VERSION=$(curl -s https://api.papermc.io/v2/projects/${PROJECT} | jq -r '.versions[-1]')\n MINECRAFT_VERSION=${LATEST_VERSION}\nfi\n\nGET_BUILD=$(curl -s https://api.papermc.io/v2/projects/${PROJECT}/versions/${MINECRAFT_VERSION} | jq -r '.builds[-1]')\nBUILD_NUMBER=${GET_BUILD}\n\n\nJAR_NAME=${PROJECT}-${MINECRAFT_VERSION}-${BUILD_NUMBER}.jar\n\necho \"Version being downloaded\"\necho -e \"MC Version: ${MINECRAFT_VERSION}\"\necho -e \"Build: ${BUILD_NUMBER}\"\necho -e \"JAR Name of Build: ${JAR_NAME}\"\nDOWNLOAD_URL=https://api.papermc.io/v2/projects/${PROJECT}/versions/${MINECRAFT_VERSION}/builds/${BUILD_NUMBER}/downloads/${JAR_NAME}\n\ncd /mnt/server\n\necho -e \"Running curl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\"\n\nif [ -f ${SERVER_JARFILE} ]; then\n mv ${SERVER_JARFILE} ${SERVER_JARFILE}.old\nfi\n\ncurl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\n"
|
||||
);
|
||||
}
|
||||
}
|
||||
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