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