/* ========================================================================
* Copyright (c) 2005-2025 The OPC Foundation, Inc. All rights reserved.
*
* OPC Foundation MIT License 1.00
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following
* conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*
* The complete license agreement can be found here:
* http://opcfoundation.org/License/MIT/1.00/
* ======================================================================*/
using System;
namespace Opc.Ua.Client.Alarms
{
///
/// Dependency-injected factory that produces a fresh
/// bound to a caller-supplied
/// (typically the connected
/// ) and the host's
/// .
///
///
/// Registered as a singleton by the
/// IOpcUaBuilder.AddAlarms() fluent extension. Consumers
/// resolve this factory and call
/// per session to obtain a Part 9 alarm/condition client scoped to
/// that session. The factory mirrors
/// ComplexTypeSystemFactory and is the recommended path for
/// DI-hosted client applications; the
/// AlarmClientSessionExtensions.GetAlarmClient extension
/// remains as the non-DI fallback.
///
public sealed class AlarmClientFactory
{
///
/// Initializes a new instance.
///
/// The shared telemetry context. Held
/// for future use (logger / activity source plumbing into
/// ) so registering this factory does
/// not require a future API churn when telemetry surfaces are
/// added to the alarm client.
///
/// is null.
public AlarmClientFactory(ITelemetryContext telemetry)
{
m_telemetry = telemetry ?? throw new ArgumentNullException(nameof(telemetry));
}
///
/// Creates a new bound to
/// .
///
/// The client session to invoke
/// Part 9 condition / alarm / dialog methods through.
/// A fresh .
///
/// is null.
public AlarmClient Create(ISessionClient session)
{
if (session is null)
{
throw new ArgumentNullException(nameof(session));
}
return new AlarmClient(session, m_telemetry);
}
///
/// Returns the shared the
/// factory was initialized with. Exposed for derived
/// scenarios; the standard
/// path threads it implicitly.
///
public ITelemetryContext Telemetry => m_telemetry;
private readonly ITelemetryContext m_telemetry;
}
}