75 lines
2.1 KiB
C#
75 lines
2.1 KiB
C#
using MoonCore.Helpers;
|
|
using MoonlightServers.Daemon.Configuration;
|
|
using MoonlightServers.Daemon.Helpers;
|
|
using MoonlightServers.Daemon.Models.Cache;
|
|
using MoonlightServers.DaemonShared.Enums;
|
|
|
|
namespace MoonlightServers.Daemon.Models;
|
|
|
|
public class Server
|
|
{
|
|
public ILogger Logger { get; set; }
|
|
public ServerConsole Console { get; set; }
|
|
public IServiceProvider ServiceProvider { get; set; }
|
|
public ServerState State => StateMachine.CurrentState;
|
|
public StateMachine<ServerState> StateMachine { get; set; }
|
|
public ServerConfiguration Configuration { get; set; }
|
|
public string? ContainerId { get; set; }
|
|
public event Func<string, Task> OnTaskAdded;
|
|
|
|
// This can be used to stop streaming when the server gets destroyed or something
|
|
public CancellationTokenSource Cancellation { get; set; }
|
|
|
|
#region Small helpers
|
|
|
|
public string RuntimeContainerName => $"moonlight-runtime-{Configuration.Id}";
|
|
public string InstallContainerName => $"moonlight-install-{Configuration.Id}";
|
|
|
|
public string RuntimeVolumePath
|
|
{
|
|
get
|
|
{
|
|
var appConfig = ServiceProvider.GetRequiredService<AppConfiguration>();
|
|
|
|
var localPath = PathBuilder.Dir(
|
|
appConfig.Storage.Volumes,
|
|
Configuration.Id.ToString()
|
|
);
|
|
|
|
var absolutePath = Path.GetFullPath(localPath);
|
|
|
|
return absolutePath;
|
|
}
|
|
}
|
|
|
|
public string InstallVolumePath
|
|
{
|
|
get
|
|
{
|
|
var appConfig = ServiceProvider.GetRequiredService<AppConfiguration>();
|
|
|
|
var localPath = PathBuilder.Dir(
|
|
appConfig.Storage.Install,
|
|
Configuration.Id.ToString()
|
|
);
|
|
|
|
var absolutePath = Path.GetFullPath(localPath);
|
|
|
|
return absolutePath;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Event invokers
|
|
|
|
public async Task InvokeTaskAdded(string task)
|
|
{
|
|
if(OnTaskAdded == null)
|
|
return;
|
|
|
|
await OnTaskAdded.Invoke(task).ConfigureAwait(ConfigureAwaitOptions.SuppressThrowing);
|
|
}
|
|
|
|
#endregion
|
|
} |