using Opc.Ua;
using Opc.Ua.Client;
using Serilog;
namespace ZB.MOM.WW.LmxOpcUa.Client.Shared.Adapters;
///
/// Production session factory that creates real OPC UA sessions.
///
internal sealed class DefaultSessionFactory : ISessionFactory
{
private static readonly ILogger Logger = Log.ForContext();
public async Task CreateSessionAsync(
ApplicationConfiguration config,
EndpointDescription endpoint,
string sessionName,
uint sessionTimeoutMs,
UserIdentity identity,
CancellationToken ct)
{
var endpointConfig = EndpointConfiguration.Create(config);
var configuredEndpoint = new ConfiguredEndpoint(null, endpoint, endpointConfig);
var session = await Session.Create(
config,
configuredEndpoint,
false,
sessionName,
sessionTimeoutMs,
identity,
null);
Logger.Information("Session created: {SessionName} -> {EndpointUrl}", sessionName, endpoint.EndpointUrl);
return new DefaultSessionAdapter(session);
}
}