/// <summary> /// Create session /// </summary> /// <param name="manager"></param> /// <param name="context"></param> /// <param name="id"></param> /// <param name="endpoint"></param> /// <param name="serverCertificate"></param> /// <param name="clientNonce"></param> /// <param name="timeout"></param> /// <param name="serverNonce"></param> /// <param name="clientCertificate"></param> /// <param name="maxRequestAge"></param> /// <param name="validator"></param> public GatewaySession(SessionServices manager, RequestContextModel context, NodeId id, EndpointDescription endpoint, X509Certificate2 clientCertificate, byte[] clientNonce, X509Certificate2 serverCertificate, byte[] serverNonce, TimeSpan timeout, TimeSpan maxRequestAge, UserIdentityHandler validator) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (context.ChannelContext == null) { throw new ServiceResultException(StatusCodes.BadSecureChannelIdInvalid); } _validator = validator; _secureChannelId = context.ChannelContext.SecureChannelId; _serverNonce = serverNonce; _serverCertificate = serverCertificate; _clientCertificate = clientCertificate; _maxRequestAge = maxRequestAge; Endpoint = endpoint; Identities = new List <IUserIdentity>(); Id = id; ClientNonce = clientNonce; MessageContext = new ServiceMessageContext(); _cts = new CancellationTokenSource(); _timeout = timeout; _timeoutTimer = new Timer(o => OnTimeout(manager), null, timeout, Timeout.InfiniteTimeSpan); }
/// <summary> /// Timer expired, cleanup session /// </summary> /// <param name="manager"></param> private void OnTimeout(SessionServices manager) { manager._sessionTimeout?.Invoke(this, null); manager.CloseSession(Id); // This calls dispose }