Files
mxaccessgw/src/ZB.MOM.WW.MxGateway.Worker/MxAccess/AlarmProviderModeChange.cs
T

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; }
}