62 lines
2.2 KiB
C#
62 lines
2.2 KiB
C#
using System;
|
|
using ZB.MOM.WW.MxGateway.Contracts.Proto;
|
|
|
|
namespace ZB.MOM.WW.MxGateway.Worker.MxAccess;
|
|
|
|
/// <summary>
|
|
/// Raised by <see cref="FailoverAlarmConsumer"/> every time the active
|
|
/// alarm source switches between the primary (alarmmgr) consumer and the
|
|
/// standby (subtag) consumer. The worker translates this into the proto
|
|
/// family <c>OnAlarmProviderModeChanged</c> so connected gateway clients
|
|
/// can surface the degraded/recovered state.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// <para>
|
|
/// Plain class with constructor-assigned get-only properties — not a
|
|
/// <c>record</c> or <c>init</c>-only type — because the worker
|
|
/// multi-targets .NET Framework 4.8, which lacks
|
|
/// <c>System.Runtime.CompilerServices.IsExternalInit</c> (CS0518).
|
|
/// </para>
|
|
/// </remarks>
|
|
public sealed class AlarmProviderModeChange : EventArgs
|
|
{
|
|
/// <summary>
|
|
/// Initializes the change event payload.
|
|
/// </summary>
|
|
/// <param name="mode">The provider mode now active after the switch.</param>
|
|
/// <param name="reason">Human-readable reason for the switch.</param>
|
|
/// <param name="hResult">
|
|
/// The COM HRESULT that triggered a failover, or 0 for a clean
|
|
/// failback / no associated HRESULT.
|
|
/// </param>
|
|
/// <param name="atUtc">The UTC instant the switch occurred.</param>
|
|
public AlarmProviderModeChange(AlarmProviderMode mode, string reason, int hResult, DateTime atUtc)
|
|
{
|
|
Mode = mode;
|
|
Reason = reason ?? string.Empty;
|
|
HResult = hResult;
|
|
AtUtc = atUtc;
|
|
}
|
|
|
|
/// <summary>
|
|
/// The provider mode now active after the switch.
|
|
/// </summary>
|
|
public AlarmProviderMode Mode { get; }
|
|
|
|
/// <summary>
|
|
/// Human-readable reason for the switch (e.g. the failing COM call, or
|
|
/// <c>"recovered"</c> for a failback).
|
|
/// </summary>
|
|
public string Reason { get; }
|
|
|
|
/// <summary>
|
|
/// The COM HRESULT that triggered a failover, or 0 when none applies.
|
|
/// </summary>
|
|
public int HResult { get; }
|
|
|
|
/// <summary>
|
|
/// The UTC instant the switch occurred.
|
|
/// </summary>
|
|
public DateTime AtUtc { get; }
|
|
}
|