namespace ZB.MOM.WW.OtOpcUa.Driver.Modbus;
///
/// Single mapping point from to the concrete
/// its selects.
/// Consumed by both 's default transport-factory closure and the
/// AdminUI Test-Connect probe, so the switch lives in
/// exactly one place.
///
public static class ModbusTransportFactory
{
///
/// Builds the transport .
/// selects, threading every shared connection setting (Host/Port/Timeout/AutoReconnect/
/// KeepAlive/IdleDisconnectTimeout/Reconnect) through to whichever concrete transport is built.
///
/// Driver configuration options.
/// A when
/// is selected; a when is selected.
///
/// . is not a recognized
/// member — fail loudly rather than silently falling back to TCP/MBAP.
///
public static IModbusTransport Create(ModbusDriverOptions options)
{
ArgumentNullException.ThrowIfNull(options);
return options.Transport switch
{
ModbusTransportMode.RtuOverTcp => new ModbusRtuOverTcpTransport(
options.Host, options.Port, options.Timeout, options.AutoReconnect,
keepAlive: options.KeepAlive,
idleDisconnect: options.IdleDisconnectTimeout,
reconnect: options.Reconnect),
ModbusTransportMode.Tcp => new ModbusTcpTransport(
options.Host, options.Port, options.Timeout, options.AutoReconnect,
keepAlive: options.KeepAlive,
idleDisconnect: options.IdleDisconnectTimeout,
reconnect: options.Reconnect),
_ => throw new ArgumentOutOfRangeException(
nameof(options), options.Transport, "Unknown Modbus transport mode."),
};
}
}