feat(dcl): register MxGateway protocol in factory + config flatten + options
DataConnectionFactory registers 'MxGateway' -> MxGatewayDataConnection over the
real client; AddDataConnectionLayer binds MxGatewayGlobalOptions; DeploymentManager
FlattenConnectionConfig gains an MxGateway arm using the typed serializer. Factory
test confirms Create("MxGateway") returns the adapter.
This commit is contained in:
@@ -38,6 +38,13 @@ public class DataConnectionFactory : IDataConnectionFactory
|
|||||||
RegisterAdapter("OpcUa", details => new OpcUaDataConnection(
|
RegisterAdapter("OpcUa", details => new OpcUaDataConnection(
|
||||||
new RealOpcUaClientFactory(globalOptions, _loggerFactory),
|
new RealOpcUaClientFactory(globalOptions, _loggerFactory),
|
||||||
_loggerFactory.CreateLogger<OpcUaDataConnection>()));
|
_loggerFactory.CreateLogger<OpcUaDataConnection>()));
|
||||||
|
|
||||||
|
// MxGateway: gRPC to the MxAccess Gateway. The RealMxGatewayClient wraps the
|
||||||
|
// ZB.MOM.WW.MxGateway.Client package; per-connection config arrives via the
|
||||||
|
// flat details dict (see MxGatewayEndpointConfigSerializer).
|
||||||
|
RegisterAdapter("MxGateway", details => new MxGatewayDataConnection(
|
||||||
|
new RealMxGatewayClientFactory(_loggerFactory),
|
||||||
|
_loggerFactory.CreateLogger<MxGatewayDataConnection>()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -18,6 +18,9 @@ public static class ServiceCollectionExtensions
|
|||||||
services.AddOptions<OpcUaGlobalOptions>()
|
services.AddOptions<OpcUaGlobalOptions>()
|
||||||
.BindConfiguration("OpcUa");
|
.BindConfiguration("OpcUa");
|
||||||
|
|
||||||
|
services.AddOptions<MxGatewayGlobalOptions>()
|
||||||
|
.BindConfiguration("MxGateway");
|
||||||
|
|
||||||
// WP-34: Register the factory for protocol extensibility
|
// WP-34: Register the factory for protocol extensibility
|
||||||
services.AddSingleton<IDataConnectionFactory, DataConnectionFactory>();
|
services.AddSingleton<IDataConnectionFactory, DataConnectionFactory>();
|
||||||
|
|
||||||
|
|||||||
@@ -767,6 +767,12 @@ public class DeploymentManagerActor : ReceiveActor, IWithTimers
|
|||||||
return Commons.Serialization.OpcUaEndpointConfigSerializer.ToFlatDict(config);
|
return Commons.Serialization.OpcUaEndpointConfigSerializer.ToFlatDict(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (string.Equals(protocol, "MxGateway", StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
var config = Commons.Serialization.MxGatewayEndpointConfigSerializer.Deserialize(json);
|
||||||
|
return Commons.Serialization.MxGatewayEndpointConfigSerializer.ToFlatDict(config);
|
||||||
|
}
|
||||||
|
|
||||||
// Fallback: assume legacy flat-dict shape for any future / unknown protocol.
|
// Fallback: assume legacy flat-dict shape for any future / unknown protocol.
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -18,6 +18,16 @@ public class DataConnectionFactoryTests
|
|||||||
Assert.IsType<OpcUaDataConnection>(connection);
|
Assert.IsType<OpcUaDataConnection>(connection);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Create_MxGateway_ReturnsMxGatewayAdapter()
|
||||||
|
{
|
||||||
|
var factory = new DataConnectionFactory(NullLoggerFactory.Instance);
|
||||||
|
|
||||||
|
var connection = factory.Create("MxGateway", new Dictionary<string, string>());
|
||||||
|
|
||||||
|
Assert.IsType<MxGatewayDataConnection>(connection);
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Create_CaseInsensitive()
|
public void Create_CaseInsensitive()
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user