dragon-iso/src/TeamsISO.Engine
Zac Gaetano 9c231118de feat(stats): wire IsoHealthStats end-to-end and surface live counters in UI
IsoPipeline now publishes refs to its currently-live NdiReceiver and NdiSender (set by RunInnerPipelineAsync, cleared on exit) so a stats poll from any thread can read FramesCaptured / FramesSent without entangling the pipeline's lifetime with its observer. The receiver's raw-frame channel is wrapped with a TappedChannelWriter so the most recent RawFrame is captured for source-resolution display, again without changing the receiver's contract.

IsoController.GetStats() drops the stub return-Empty and instead reads the live pipeline.GetStats() outside the gate so a slow stats read can't serialize the controller's other operations.

WPF: MainViewModel runs a 1 Hz DispatcherTimer that pulls stats for every participant view-model and pushes them via UpdateStats(). ParticipantViewModel grows three displayable properties — FramesIn, FramesOut, IncomingResolution — bound into the participants DataGrid as a new 'Live' column showing the down/up frame counts and the source resolution underneath the machine name.

Tests: 74/74 unit + 9/9 NDI integration green; the existing round-trip integration test exercises the new wiring at runtime (live receiver/sender refs are set, frames flow, channels close cleanly).
2026-05-08 00:52:44 -04:00
..
Controller feat(stats): wire IsoHealthStats end-to-end and surface live counters in UI 2026-05-08 00:52:44 -04:00
Discovery feat(ndi): plumb NDI groups (discovery + output) through the engine 2026-05-07 23:48:49 -04:00
Domain feat(ndi): plumb NDI groups (discovery + output) through the engine 2026-05-07 23:48:49 -04:00
Interop feat(ndi): plumb NDI groups (discovery + output) through the engine 2026-05-07 23:48:49 -04:00
Logging feat(logging): rolling file sink under %LOCALAPPDATA%\\TeamsISO\\Logs 2026-05-08 00:47:25 -04:00
Persistence feat(persistence): add ConfigStore with atomic JSON writes and corruption-safe load 2026-05-07 15:12:01 +00:00
Pipeline feat(stats): wire IsoHealthStats end-to-end and surface live counters in UI 2026-05-08 00:52:44 -04:00
TeamsISO.Engine.csproj feat(logging): rolling file sink under %LOCALAPPDATA%\\TeamsISO\\Logs 2026-05-08 00:47:25 -04:00