Route observed daemon through managed sessions
This commit is contained in:
parent
8a14dd74ee
commit
08c4fc190e
3 changed files with 42 additions and 27 deletions
|
|
@ -15387,7 +15387,7 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
|
|||
!observedFrameApplier.Contains("ApplyLatestZoneRender()", StringComparison.Ordinal) ||
|
||||
!observedFrameApplier.Contains("observer.LastObservedState?.ZoneRender", StringComparison.Ordinal) ||
|
||||
!observedDaemonState.Contains("public AetheriaRuntimeZoneRenderDocument ZoneRender { get; }", StringComparison.Ordinal) ||
|
||||
!observedDaemonState.Contains("CultMeshReactiveDocument<AetheriaRuntimeZoneRenderDocument> zoneRender", StringComparison.Ordinal) ||
|
||||
!observedDaemonState.Contains("AetheriaRuntimeZoneRenderSession zoneRender", StringComparison.Ordinal) ||
|
||||
!observedDaemonState.Contains("var currentZoneRender = zoneRender?.Current;", StringComparison.Ordinal) ||
|
||||
!observedDaemonState.Contains("new AetheriaRuntimeObservedDaemonState(currentFrame, currentSoaView, currentZoneRender)", StringComparison.Ordinal) ||
|
||||
!aetheriaClientState.Contains("var zoneRender = await LatestZoneRenderAsync().ConfigureAwait(false);", StringComparison.Ordinal) ||
|
||||
|
|
@ -15517,10 +15517,13 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
|
|||
{
|
||||
"public AetheriaRuntimeObservedDaemonState? CurrentObservedDaemon(",
|
||||
"public AetheriaRuntimeObservedDaemonSession ObserveDaemon(",
|
||||
"using var frame = ReactiveDaemonFrame(options);",
|
||||
"using var soaView = TryReactiveDaemonSoaView(options);",
|
||||
"using var zoneRender = ReactiveZoneRender(options);",
|
||||
"using var frame = ObserveDaemonFrame(options);",
|
||||
"using var soaView = TryObserveDaemonSoaView(options);",
|
||||
"using var zoneRender = ObserveZoneRender(options);",
|
||||
"AetheriaRuntimeObservedDaemonState.TryCreateCurrent(frame, soaView, zoneRender, out var current)",
|
||||
"var frame = ObserveDaemonFrame(options);",
|
||||
"AetheriaRuntimeDaemonSoaViewSession? soaView = null;",
|
||||
"AetheriaRuntimeZoneRenderSession? zoneRender = null;",
|
||||
"return new AetheriaRuntimeObservedDaemonSession(frame, soaView, zoneRender);"
|
||||
};
|
||||
var missingManagedObservedDaemonSymbols = requiredManagedObservedDaemonSymbols
|
||||
|
|
@ -15545,13 +15548,16 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
|
|||
{
|
||||
"AetheriaRuntimeDaemonSoaViewIndex.Build(soaView)",
|
||||
"public static bool TryCreateCurrent(",
|
||||
"CultMeshReactiveDocument<AetheriaRuntimeDaemonFrameDocument> frame",
|
||||
"CultMeshReactiveDocument<AetheriaRuntimeDaemonSoaViewDocument>? soaView",
|
||||
"CultMeshReactiveDocument<AetheriaRuntimeZoneRenderDocument> zoneRender",
|
||||
"AetheriaRuntimeDaemonFrameSession frame",
|
||||
"AetheriaRuntimeDaemonSoaViewSession? soaView",
|
||||
"AetheriaRuntimeZoneRenderSession zoneRender",
|
||||
"var currentFrame = frame?.Current;",
|
||||
"var currentZoneRender = zoneRender?.Current;",
|
||||
"new AetheriaRuntimeObservedDaemonState(currentFrame, currentSoaView, currentZoneRender)",
|
||||
"public sealed class AetheriaRuntimeObservedDaemonSession",
|
||||
"private readonly AetheriaRuntimeDaemonFrameSession _frame;",
|
||||
"private readonly AetheriaRuntimeDaemonSoaViewSession? _soaView;",
|
||||
"private readonly AetheriaRuntimeZoneRenderSession _zoneRender;",
|
||||
"public AetheriaRuntimeObservedDaemonState? Current =>",
|
||||
"_frame.Dispose();",
|
||||
"_soaView?.Dispose();",
|
||||
|
|
@ -15567,6 +15573,16 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
|
|||
string.Join(", ", missingObservedDaemonStateSymbols));
|
||||
}
|
||||
|
||||
if (observedDaemonState.Contains("CultMeshReactiveDocument<AetheriaRuntimeDaemonFrameDocument>", StringComparison.Ordinal) ||
|
||||
observedDaemonState.Contains("CultMeshReactiveDocument<AetheriaRuntimeDaemonSoaViewDocument>", StringComparison.Ordinal) ||
|
||||
observedDaemonState.Contains("CultMeshReactiveDocument<AetheriaRuntimeZoneRenderDocument>", StringComparison.Ordinal) ||
|
||||
observedDaemonState.Contains("using GameCult.Mesh;", StringComparison.Ordinal) ||
|
||||
aetheriaClientState.Contains("TryReactiveDaemonSoaView(options)", StringComparison.Ordinal))
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"Observed daemon state must compose named managed sessions instead of owning raw reactive CultMesh documents.");
|
||||
}
|
||||
|
||||
var forbiddenObservedDaemonStateSymbols = new[]
|
||||
{
|
||||
"string statePath",
|
||||
|
|
|
|||
|
|
@ -277,9 +277,9 @@ namespace GameCult.Aetheria.State.Verse
|
|||
public AetheriaRuntimeObservedDaemonState? CurrentObservedDaemon(
|
||||
CultMeshReactiveDocumentOptions? options = null)
|
||||
{
|
||||
using var frame = ReactiveDaemonFrame(options);
|
||||
using var soaView = TryReactiveDaemonSoaView(options);
|
||||
using var zoneRender = ReactiveZoneRender(options);
|
||||
using var frame = ObserveDaemonFrame(options);
|
||||
using var soaView = TryObserveDaemonSoaView(options);
|
||||
using var zoneRender = ObserveZoneRender(options);
|
||||
return AetheriaRuntimeObservedDaemonState.TryCreateCurrent(frame, soaView, zoneRender, out var current)
|
||||
? current
|
||||
: null;
|
||||
|
|
@ -288,13 +288,13 @@ namespace GameCult.Aetheria.State.Verse
|
|||
public AetheriaRuntimeObservedDaemonSession ObserveDaemon(
|
||||
CultMeshReactiveDocumentOptions? options = null)
|
||||
{
|
||||
var frame = ReactiveDaemonFrame(options);
|
||||
CultMeshReactiveDocument<AetheriaRuntimeDaemonSoaViewDocument>? soaView = null;
|
||||
CultMeshReactiveDocument<AetheriaRuntimeZoneRenderDocument>? zoneRender = null;
|
||||
var frame = ObserveDaemonFrame(options);
|
||||
AetheriaRuntimeDaemonSoaViewSession? soaView = null;
|
||||
AetheriaRuntimeZoneRenderSession? zoneRender = null;
|
||||
try
|
||||
{
|
||||
soaView = TryReactiveDaemonSoaView(options);
|
||||
zoneRender = ReactiveZoneRender(options);
|
||||
soaView = TryObserveDaemonSoaView(options);
|
||||
zoneRender = ObserveZoneRender(options);
|
||||
return new AetheriaRuntimeObservedDaemonSession(frame, soaView, zoneRender);
|
||||
}
|
||||
catch
|
||||
|
|
@ -338,12 +338,12 @@ namespace GameCult.Aetheria.State.Verse
|
|||
}
|
||||
}
|
||||
|
||||
private CultMeshReactiveDocument<AetheriaRuntimeDaemonSoaViewDocument>? TryReactiveDaemonSoaView(
|
||||
private AetheriaRuntimeDaemonSoaViewSession? TryObserveDaemonSoaView(
|
||||
CultMeshReactiveDocumentOptions? options)
|
||||
{
|
||||
try
|
||||
{
|
||||
return ReactiveDaemonSoaView(options);
|
||||
return ObserveDaemonSoaView(options);
|
||||
}
|
||||
catch (KeyNotFoundException)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
using System;
|
||||
using GameCult.Mesh;
|
||||
|
||||
#nullable enable
|
||||
|
||||
|
|
@ -27,9 +26,9 @@ namespace GameCult.Aetheria.State.Verse
|
|||
public AetheriaRuntimeRunCheckpointCommit Run => Frame.Run;
|
||||
|
||||
public static bool TryCreateCurrent(
|
||||
CultMeshReactiveDocument<AetheriaRuntimeDaemonFrameDocument> frame,
|
||||
CultMeshReactiveDocument<AetheriaRuntimeDaemonSoaViewDocument>? soaView,
|
||||
CultMeshReactiveDocument<AetheriaRuntimeZoneRenderDocument> zoneRender,
|
||||
AetheriaRuntimeDaemonFrameSession frame,
|
||||
AetheriaRuntimeDaemonSoaViewSession? soaView,
|
||||
AetheriaRuntimeZoneRenderSession zoneRender,
|
||||
out AetheriaRuntimeObservedDaemonState? observed)
|
||||
{
|
||||
observed = null;
|
||||
|
|
@ -60,14 +59,14 @@ namespace GameCult.Aetheria.State.Verse
|
|||
|
||||
public sealed class AetheriaRuntimeObservedDaemonSession : IDisposable
|
||||
{
|
||||
private readonly CultMeshReactiveDocument<AetheriaRuntimeDaemonFrameDocument> _frame;
|
||||
private readonly CultMeshReactiveDocument<AetheriaRuntimeDaemonSoaViewDocument>? _soaView;
|
||||
private readonly CultMeshReactiveDocument<AetheriaRuntimeZoneRenderDocument> _zoneRender;
|
||||
private readonly AetheriaRuntimeDaemonFrameSession _frame;
|
||||
private readonly AetheriaRuntimeDaemonSoaViewSession? _soaView;
|
||||
private readonly AetheriaRuntimeZoneRenderSession _zoneRender;
|
||||
|
||||
public AetheriaRuntimeObservedDaemonSession(
|
||||
CultMeshReactiveDocument<AetheriaRuntimeDaemonFrameDocument> frame,
|
||||
CultMeshReactiveDocument<AetheriaRuntimeDaemonSoaViewDocument>? soaView,
|
||||
CultMeshReactiveDocument<AetheriaRuntimeZoneRenderDocument> zoneRender)
|
||||
AetheriaRuntimeDaemonFrameSession frame,
|
||||
AetheriaRuntimeDaemonSoaViewSession? soaView,
|
||||
AetheriaRuntimeZoneRenderSession zoneRender)
|
||||
{
|
||||
_frame = frame ?? throw new ArgumentNullException(nameof(frame));
|
||||
_soaView = soaView;
|
||||
|
|
|
|||
Loading…
Reference in a new issue