27a8d05b7c
The mxaccessgw updated alarms to a session-less central monitor: AcknowledgeAlarm dropped SessionId and alarm transitions now come from the session-less StreamAlarms feed instead of the per-session worker StreamEvents stream. The GalaxyDriver no longer compiled against the updated client. - GatewayGalaxyAlarmAcknowledger: session-less rewrite — no GalaxyMxSession; outcome read from ProtocolStatus (throw) and Hresult (warn). - New IGalaxyAlarmFeed seam + GatewayGalaxyAlarmFeed: background consumer of StreamAlarms that decodes the active-alarm snapshot plus live transitions into GalaxyAlarmTransition and reopens the stream on transport faults. - EventPump: drop the dead per-session OnAlarmTransition path; the per-session stream no longer carries alarms. - GalaxyDriver: bridge the feed onto IAlarmSource.OnAlarmEvent; the feed starts on SubscribeAlarmsAsync, independent of data subscriptions. - Tests: replace EventPumpAlarmTests with GatewayGalaxyAlarmFeedTests; move the driver alarm-source tests onto the IGalaxyAlarmFeed seam. Browse needed no change — GatewayGalaxyHierarchySource consumes the unchanged DiscoverHierarchy contract. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
30 lines
1.3 KiB
C#
30 lines
1.3 KiB
C#
namespace ZB.MOM.WW.OtOpcUa.Driver.Galaxy.Runtime;
|
|
|
|
/// <summary>
|
|
/// Driver-side seam for the gateway's session-less alarm feed. Production wraps
|
|
/// <c>MxGatewayClient.StreamAlarmsAsync</c> (<see cref="GatewayGalaxyAlarmFeed"/>);
|
|
/// tests substitute a fake to drive synthetic <see cref="GalaxyAlarmTransition"/>
|
|
/// events through <see cref="GalaxyDriver"/>'s <c>IAlarmSource</c> bridge without a
|
|
/// running gateway.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// The feed is independent of any worker session — the updated gateway serves
|
|
/// alarms from an always-on central monitor, so the feed survives subscription
|
|
/// churn and reconnects its own stream on transient transport failures.
|
|
/// </remarks>
|
|
internal interface IGalaxyAlarmFeed : IAsyncDisposable
|
|
{
|
|
/// <summary>
|
|
/// Fires for every alarm transition the gateway feed delivers — both the
|
|
/// entries of the initial active-alarm snapshot and every subsequent live
|
|
/// raise / acknowledge / clear. The OPC UA severity bucket is already mapped.
|
|
/// </summary>
|
|
event EventHandler<GalaxyAlarmTransition>? OnAlarmTransition;
|
|
|
|
/// <summary>
|
|
/// Start consuming the alarm feed on a background task. Idempotent — second
|
|
/// calls are no-ops while the loop is running.
|
|
/// </summary>
|
|
void Start();
|
|
}
|