feat: migrate legacy playout workflow and scenes

This commit is contained in:
2026-07-10 23:58:45 +09:00
parent 491a740505
commit 8dae7b8e0d
128 changed files with 39177 additions and 205 deletions

View File

@@ -130,6 +130,7 @@ public sealed partial class MainWindow : Window
if (PlayoutBridgeProtocol.IsTrustedSource(uri.AbsoluteUri, AppHost) ||
uri.Scheme == "about")
{
QuarantineIfBrowserCorrelationCanBeLost();
LoadingOverlay.Visibility = Visibility.Visible;
return;
}
@@ -192,6 +193,9 @@ public sealed partial class MainWindow : Window
case "playout-command":
_ = HandlePlayoutCommandAsync(request.Payload);
break;
case "playout-timeout-quarantine":
_ = HandlePlayoutTimeoutQuarantineAsync(request.Payload);
break;
case "request-market-data" when request.Payload.ValueKind == JsonValueKind.Object:
_ = HandleMarketDataRequestAsync(request.Payload);
break;
@@ -203,7 +207,7 @@ public sealed partial class MainWindow : Window
}
break;
case "reload":
Browser.Reload();
ReloadBrowserSafely();
break;
}
}
@@ -477,6 +481,7 @@ public sealed partial class MainWindow : Window
private void OnProcessFailed(object? sender, CoreWebView2ProcessFailedEventArgs args)
{
QuarantineIfBrowserCorrelationCanBeLost();
ShowError("WebView2 프로세스가 종료되었습니다.", args.ProcessFailedKind.ToString());
}
@@ -508,7 +513,23 @@ public sealed partial class MainWindow : Window
{
if (_webViewReady)
{
Browser.Reload();
ReloadBrowserSafely();
}
}
private void ReloadBrowserSafely()
{
QuarantineIfBrowserCorrelationCanBeLost();
Browser.Reload();
}
private void QuarantineIfBrowserCorrelationCanBeLost()
{
if (Volatile.Read(ref _playoutCommandInFlight) != 0)
{
// Navigation or a renderer failure destroys the JavaScript request
// correlation. Latch native OutcomeUnknown before the document can go away.
_ = QuarantineForBrowserCorrelationLossAsync();
}
}