Fixed event/observer issues

This commit is contained in:
2025-07-30 17:12:21 +02:00
parent bb81ca9674
commit eaf8c36f7f
8 changed files with 113 additions and 87 deletions

View File

@@ -3,6 +3,9 @@ using System.Reactive.Linq;
using System.Reactive.Subjects;
using Docker.DotNet;
using Docker.DotNet.Models;
using MoonCore.Observability;
using MoonlightServers.Daemon.Extensions;
using MoonlightServers.Daemon.Helpers;
using MoonlightServers.Daemon.Mappers;
using MoonlightServers.Daemon.ServerSys.Abstractions;
using MoonlightServers.Daemon.Services;
@@ -11,7 +14,7 @@ namespace MoonlightServers.Daemon.ServerSys.Implementations;
public class DockerProvisioner : IProvisioner
{
public IAsyncObservable<object> OnExited => OnExitedSubject.ToAsyncObservable();
public IAsyncObservable<object> OnExited => OnExitedSubject;
public bool IsProvisioned { get; private set; }
private readonly DockerClient DockerClient;
@@ -23,7 +26,7 @@ public class DockerProvisioner : IProvisioner
private readonly ServerConfigurationMapper Mapper;
private readonly IFileSystem FileSystem;
private Subject<object> OnExitedSubject = new();
private EventSubject<object> OnExitedSubject = new();
private string? ContainerId;
private string ContainerName;
@@ -56,7 +59,7 @@ public class DockerProvisioner : IProvisioner
ContainerEventSubscription = await EventService
.OnContainerEvent
.SubscribeAsync(HandleContainerEvent);
.SubscribeEventAsync(HandleContainerEvent);
// Check for any already existing runtime container to reclaim
Logger.LogDebug("Searching for orphan container to reclaim");
@@ -74,19 +77,17 @@ public class DockerProvisioner : IProvisioner
}
}
private ValueTask HandleContainerEvent(Message message)
private async ValueTask HandleContainerEvent(Message message)
{
// Only handle events for our own container
if (message.ID != ContainerId)
return ValueTask.CompletedTask;
return;
// Only handle die events
if (message.Action != "die")
return ValueTask.CompletedTask;
return;
OnExitedSubject.OnNext(message);
return ValueTask.CompletedTask;
await OnExitedSubject.OnNextAsync(message);
}
public Task Sync()