feat(dcl): MxGateway StreamAlarms adapter (snapshot + live transitions, reconnecting)
Adds IAlarmSubscribableConnection to MxGatewayDataConnection (shared session-less feed, ref-counted), IMxGatewayClient.RunAlarmStreamAsync over the package StreamAlarmsAsync with internal reconnect, and MxGatewayAlarmMapper (AlarmFeedMessage/OnAlarmTransitionEvent -> NativeAlarmTransition). Behavior verified against a live gateway in Task 28; mapper unit-tested.
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using ZB.MOM.WW.ScadaBridge.Commons.Interfaces.Protocol;
|
||||
using ZB.MOM.WW.ScadaBridge.Commons.Types.Alarms;
|
||||
|
||||
namespace ZB.MOM.WW.ScadaBridge.DataConnectionLayer.Adapters;
|
||||
|
||||
@@ -69,6 +70,17 @@ public interface IMxGatewayClient : IAsyncDisposable
|
||||
/// <param name="onUpdate">Callback invoked per advised-tag value change.</param>
|
||||
/// <param name="ct">Cancellation token; ends the loop when cancelled.</param>
|
||||
Task RunEventLoopAsync(Action<MxValueUpdate> onUpdate, CancellationToken ct = default);
|
||||
|
||||
/// <summary>
|
||||
/// Long-running consumer of the gateway's session-less StreamAlarms feed. Emits a
|
||||
/// Snapshot…SnapshotComplete replay of active alarms then live transitions. Re-opens
|
||||
/// the stream internally on transport faults (the source replays a fresh snapshot).
|
||||
/// Completes only when <paramref name="ct"/> is cancelled.
|
||||
/// </summary>
|
||||
/// <param name="alarmFilterPrefix">Optional source-reference prefix to scope the feed; null = gateway-wide.</param>
|
||||
/// <param name="onTransition">Callback invoked per native alarm transition.</param>
|
||||
/// <param name="ct">Cancellation token; ends the loop when cancelled.</param>
|
||||
Task RunAlarmStreamAsync(string? alarmFilterPrefix, Action<NativeAlarmTransition> onTransition, CancellationToken ct = default);
|
||||
}
|
||||
|
||||
/// <summary>Builds <see cref="IMxGatewayClient"/> instances.</summary>
|
||||
|
||||
Reference in New Issue
Block a user