feat(driver-galaxy): consume the gateway's session-less alarm model
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>
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
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();
|
||||
}
|
||||
Reference in New Issue
Block a user