/// <summary>
 /// Overload that does not continue on exception and can only be cancelled.
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="client"></param>
 /// <param name="elevation"></param>
 /// <param name="priority"></param>
 /// <param name="ct"></param>
 /// <param name="endpoint"></param>
 /// <param name="service"></param>
 /// <returns></returns>
 public static Task <T> ExecuteServiceAsync <T>(this IEndpointServices client,
                                                EndpointModel endpoint, CredentialModel elevation, int priority,
                                                CancellationToken ct, Func <Session, Task <T> > service)
 {
     return(client.ExecuteServiceAsync(endpoint, elevation, priority, ct, service,
                                       _ => true));
 }
 /// <summary>
 /// Create node stream encoder
 /// </summary>
 /// <param name="client"></param>
 /// <param name="endpoint"></param>
 /// <param name="diagnostics"></param>
 /// <param name="encoder"></param>
 /// <param name="elevation"></param>
 /// <param name="logger"></param>
 /// <param name="priority"></param>
 public BrowseStreamEncoder(IEndpointServices client, EndpointModel endpoint,
                            IEncoder encoder, DiagnosticsModel diagnostics, ILogger logger, CredentialModel elevation = null,
                            int priority = int.MaxValue) :
     this(client, endpoint, diagnostics, logger, elevation, priority)
 {
     _encoder = new ModelEncoder(encoder, PushNode);
 }
Exemple #3
0
 /// <summary>
 /// Overload which can only be cancelled.
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="client"></param>
 /// <param name="connection"></param>
 /// <param name="ct"></param>
 /// <param name="service"></param>
 /// <param name="handler"></param>
 /// <returns></returns>
 public static Task <T> ExecuteServiceAsync <T>(this IEndpointServices client,
                                                ConnectionModel connection, CancellationToken ct, Func <Session, Task <T> > service,
                                                Func <Exception, bool> handler)
 {
     return(client.ExecuteServiceAsync(connection, null, 0, service,
                                       null, ct, handler));
 }
 /// <summary>
 /// Overload that runs in the foreground, does not continue on exception
 /// but allows specifying timeout.
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="client"></param>
 /// <param name="elevation"></param>
 /// <param name="timeout"></param>
 /// <param name="endpoint"></param>
 /// <param name="service"></param>
 /// <returns></returns>
 public static Task <T> ExecuteServiceAsync <T>(this IEndpointServices client,
                                                EndpointModel endpoint, CredentialModel elevation, TimeSpan timeout,
                                                Func <Session, Task <T> > service)
 {
     return(client.ExecuteServiceAsync(endpoint, elevation, 0, service,
                                       timeout, CancellationToken.None, _ => true));
 }
 /// <summary>
 /// Create twin services
 /// </summary>
 /// <param name="client"></param>
 /// <param name="events"></param>
 /// <param name="logger"></param>
 public TwinServices(IEndpointServices client, IEventEmitter events, ILogger logger)
 {
     _client   = client ?? throw new ArgumentNullException(nameof(client));
     _events   = events ?? throw new ArgumentNullException(nameof(events));
     _logger   = logger ?? throw new ArgumentNullException(nameof(logger));
     _endpoint = new TaskCompletionSource <EndpointModel>();
     _lock     = new SemaphoreSlim(1, 1);
 }
Exemple #6
0
 /// <summary>
 /// Create twin services
 /// </summary>
 /// <param name="client"></param>
 /// <param name="services"></param>
 /// <param name="events"></param>
 /// <param name="logger"></param>
 public TwinServices(IClientHost client, IEndpointServices services,
                     IEventEmitter events, ILogger logger)
 {
     _client   = client ?? throw new ArgumentNullException(nameof(client));
     _services = services ?? throw new ArgumentNullException(nameof(services));
     _events   = events ?? throw new ArgumentNullException(nameof(events));
     _logger   = logger ?? throw new ArgumentNullException(nameof(logger));
 }
 /// <summary>
 /// Internal helper
 /// </summary>
 /// <param name="client"></param>
 /// <param name="server"></param>
 /// <param name="opc"></param>
 /// <param name="logger"></param>
 private PublisherServices(IPublisherClient client, IPublisherServer server,
                           IEndpointServices opc, ILogger logger)
 {
     _opc    = opc ?? throw new ArgumentNullException(nameof(opc));
     _logger = logger ?? throw new ArgumentNullException(nameof(logger));
     _server = server;
     _client = client;
 }
 /// <summary>
 /// Overload which can only be cancelled.
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="client"></param>
 /// <param name="elevation"></param>
 /// <param name="priority"></param>
 /// <param name="ct"></param>
 /// <param name="endpoint"></param>
 /// <param name="service"></param>
 /// <param name="handler"></param>
 /// <returns></returns>
 public static Task <T> ExecuteServiceAsync <T>(this IEndpointServices client,
                                                EndpointModel endpoint, CredentialModel elevation, int priority,
                                                CancellationToken ct, Func <Session, Task <T> > service,
                                                Func <Exception, bool> handler)
 {
     return(client.ExecuteServiceAsync(endpoint, elevation, priority, service,
                                       null, ct, handler));
 }
 /// <summary>
 /// Create upload services
 /// </summary>
 /// <param name="client"></param>
 /// <param name="upload"></param>
 /// <param name="scheduler"></param>
 /// <param name="logger"></param>
 public DataUploadServices(IEndpointServices client, IBlobUpload upload,
                           ITaskScheduler scheduler, ILogger logger)
 {
     _client    = client ?? throw new ArgumentNullException(nameof(client));
     _upload    = upload ?? throw new ArgumentNullException(nameof(upload));
     _logger    = logger ?? throw new ArgumentNullException(nameof(logger));
     _scheduler = scheduler ?? throw new ArgumentNullException(nameof(scheduler));
     _tasks     = new ConcurrentDictionary <EndpointIdentifier, ModelUploadTask>();
 }
Exemple #10
0
 /// <summary>
 /// Create history encoder
 /// </summary>
 /// <param name="client"></param>
 /// <param name="endpoint"></param>
 /// <param name="encoder"></param>
 /// <param name="nodeId"></param>
 /// <param name="logger"></param>
 /// <param name="elevation"></param>
 /// <param name="startTime"></param>
 /// <param name="endTime"></param>
 /// <param name="maxValues"></param>
 /// <param name="priority"></param>
 public HistoryStreamEncoder(IEndpointServices client, EndpointModel endpoint,
                             IEncoder encoder, string nodeId, ILogger logger, CredentialModel elevation = null,
                             DateTime?startTime = null, DateTime?endTime = null, int?maxValues = null,
                             int priority       = int.MaxValue) :
     this(client, endpoint, nodeId, logger, elevation, startTime, endTime,
          maxValues, priority)
 {
     _encoder = new ModelEncoder(encoder);
 }
Exemple #11
0
 /// <summary>
 /// Execute the service on the provided session.
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="client"></param>
 /// <param name="endpoint"></param>
 /// <param name="elevation"></param>
 /// <param name="priority"></param>
 /// <param name="service"></param>
 /// <param name="timeout"></param>
 /// <param name="ct"></param>
 /// <param name="exceptionHandler"></param>
 /// <returns></returns>
 public static Task <T> ExecuteServiceAsync <T>(this IEndpointServices client,
                                                EndpointModel endpoint, CredentialModel elevation, int priority, Func <Session,
                                                                                                                       Task <T> > service, TimeSpan?timeout, CancellationToken ct,
                                                Func <Exception, bool> exceptionHandler)
 {
     return(client.ExecuteServiceAsync(new ConnectionModel {
         Endpoint = endpoint
     },
                                       elevation, priority, service, timeout, ct, exceptionHandler));
 }
 /// <summary>
 /// Create node stream encoder
 /// </summary>
 /// <param name="client"></param>
 /// <param name="endpoint"></param>
 /// <param name="diagnostics"></param>
 /// <param name="logger"></param>
 /// <param name="elevation"></param>
 /// <param name="priority"></param>
 private BrowseStreamEncoder(IEndpointServices client, EndpointModel endpoint,
                             DiagnosticsModel diagnostics, ILogger logger, CredentialModel elevation, int priority)
 {
     _client      = client ?? throw new ArgumentNullException(nameof(client));
     _logger      = logger ?? throw new ArgumentNullException(nameof(logger));
     _endpoint    = endpoint ?? throw new ArgumentNullException(nameof(endpoint));
     _elevation   = elevation;
     _diagnostics = diagnostics;
     _priority    = priority;
     _browseStack.Push(ObjectIds.RootFolder);
     _browseStack.Push(ObjectIds.TypesFolder);
 }
Exemple #13
0
 /// <summary>
 /// Create client service to control publisher
 /// </summary>
 /// <param name="client"></param>
 /// <param name="publisherUri"></param>
 /// <param name="logger"></param>
 public PublisherServerClient(IEndpointServices client, Uri publisherUri,
                              ILogger logger)
 {
     _client = client ?? throw new ArgumentNullException(nameof(client));
     _logger = logger ?? throw new ArgumentNullException(nameof(logger));
     if (publisherUri == null)
     {
         throw new ArgumentNullException(nameof(publisherUri));
     }
     _endpoint = new EndpointModel {
         Url = publisherUri.ToString()
     };
 }
        /// <summary>
        /// Create archiver
        /// </summary>
        /// <param name="client"></param>
        /// <param name="endpoint"></param>
        /// <param name="elevation"></param>
        /// <param name="archive"></param>
        /// <param name="contentType"></param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <param name="maxValues"></param>
        /// <param name="logger"></param>
        public AddressSpaceArchiver(IEndpointServices client, EndpointModel endpoint,
                                    CredentialModel elevation, IArchive archive, string contentType,
                                    DateTime?startTime, DateTime?endTime, int?maxValues, ILogger logger)
        {
            _client   = client ?? throw new ArgumentNullException(nameof(client));
            _logger   = logger ?? throw new ArgumentNullException(nameof(logger));
            _endpoint = endpoint ?? throw new ArgumentNullException(nameof(endpoint));
            _archive  = archive ?? throw new ArgumentNullException(nameof(endpoint));

            _contentType = contentType ?? ContentMimeType.UaJson;
            _startTime   = startTime ?? DateTime.UtcNow.AddDays(-1);
            _endTime     = endTime ?? DateTime.UtcNow;
            _maxValues   = maxValues ?? short.MaxValue;
            _elevation   = elevation;
        }
 /// <summary>
 /// Create services connecting to publisher server
 /// </summary>
 /// <param name="server"></param>
 /// <param name="opc"></param>
 /// <param name="logger"></param>
 public PublisherServices(IPublisherServer server, IEndpointServices opc,
                          ILogger logger) : this(null, server, opc, logger)
 {
     if (server == null)
     {
         throw new ArgumentNullException(nameof(server));
     }
     //
     // Give it 10 seconds in which we are expecting StartAsync to be
     // called. If it is not called within 10 seconds start is called
     // from timer thread. This allows startup to await publisher
     // finding without module processing begins and publish calls
     // initially fail.
     //
     _pnp = new Timer(OnReconnectTimer, null, 10000, Timeout.Infinite);
 }
        /// <summary>
        /// Read value
        /// </summary>
        /// <param name="client"></param>
        /// <param name="endpoint"></param>
        /// <param name="elevation"></param>
        /// <param name="readNode"></param>
        /// <returns></returns>
        public static Task <JToken> ReadValueAsync(this IEndpointServices client,
                                                   EndpointModel endpoint, CredentialModel elevation, string readNode)
        {
            var codec = new JsonVariantEncoder();

            return(client.ExecuteServiceAsync(endpoint, elevation, session => {
                var nodesToRead = new ReadValueIdCollection {
                    new ReadValueId {
                        NodeId = readNode.ToNodeId(session.MessageContext),
                        AttributeId = Attributes.Value
                    }
                };
                var responseHeader = session.Read(null, 0, TimestampsToReturn.Both,
                                                  nodesToRead, out var values, out var diagnosticInfos);
                var result = codec.Encode(values[0].WrappedValue,
                                          out var tmp, session.MessageContext);
                return Task.FromResult(result);
            }));
Exemple #17
0
        /// <summary>
        /// Create history encoder
        /// </summary>
        /// <param name="client"></param>
        /// <param name="endpoint"></param>
        /// <param name="nodeId"></param>
        /// <param name="logger"></param>
        /// <param name="elevation"></param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <param name="maxValues"></param>
        /// <param name="priority"></param>
        private HistoryStreamEncoder(IEndpointServices client, EndpointModel endpoint,
                                     string nodeId, ILogger logger, CredentialModel elevation, DateTime?startTime,
                                     DateTime?endTime, int?maxValues, int priority)
        {
            _client   = client ?? throw new ArgumentNullException(nameof(client));
            _logger   = logger ?? throw new ArgumentNullException(nameof(logger));
            _endpoint = endpoint ?? throw new ArgumentNullException(nameof(endpoint));

            if (string.IsNullOrEmpty(nodeId))
            {
                throw new ArgumentNullException(nameof(nodeId));
            }

            _nodeId    = nodeId;
            _elevation = elevation;
            _startTime = startTime ?? DateTime.UtcNow.AddDays(-1);
            _endTime   = endTime ?? DateTime.UtcNow;
            _maxValues = maxValues ?? short.MaxValue * 2;
            _priority  = priority;
        }
Exemple #18
0
 /// <summary>
 /// Create twin services
 /// </summary>
 /// <param name="client"></param>
 /// <param name="events"></param>
 public TwinServices(IEndpointServices client, IEventEmitter events)
 {
     _client = client ?? throw new ArgumentNullException(nameof(client));
     _events = events ?? throw new ArgumentNullException(nameof(events));
 }
 /// <summary>
 /// Create archiver
 /// </summary>
 /// <param name="client"></param>
 /// <param name="endpoint"></param>
 /// <param name="archive"></param>
 /// <param name="logger"></param>
 public AddressSpaceArchiver(IEndpointServices client, EndpointModel endpoint,
                             IArchive archive, ILogger logger) :
     this(client, endpoint, null, archive, null, null, null, null, logger)
 {
 }
Exemple #20
0
 /// <summary>
 /// Create client service to control publisher
 /// </summary>
 /// <param name="client"></param>
 /// <param name="logger"></param>
 public PublisherServerClient(IEndpointServices client, ILogger logger) :
     this(client, new Uri($"opc.tcp://{Utils.GetHostName()}:62222/UA/Publisher"),
          logger)
 {
 }
 /// <summary>
 /// Read value
 /// </summary>
 /// <param name="client"></param>
 /// <param name="endpoint"></param>
 /// <param name="readNode"></param>
 /// <returns></returns>
 public static Task <JToken> ReadValueAsync(this IEndpointServices client,
                                            EndpointModel endpoint, string readNode) =>
 ReadValueAsync(client, endpoint, null, readNode);
Exemple #22
0
 /// <summary>
 /// Overload that does not continue on exception and can only be cancelled.
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="client"></param>
 /// <param name="connection"></param>
 /// <param name="ct"></param>
 /// <param name="service"></param>
 /// <returns></returns>
 public static Task <T> ExecuteServiceAsync <T>(this IEndpointServices client,
                                                ConnectionModel connection, CancellationToken ct, Func <Session, Task <T> > service)
 {
     return(client.ExecuteServiceAsync(connection, ct, service, _ => true));
 }
 /// <summary>
 /// Overload that runs in the foreground, does not continue on exception
 /// times out after 30 seconds.
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="client"></param>
 /// <param name="elevation"></param>
 /// <param name="endpoint"></param>
 /// <param name="service"></param>
 /// <returns></returns>
 public static Task <T> ExecuteServiceAsync <T>(this IEndpointServices client,
                                                EndpointModel endpoint, CredentialModel elevation, Func <Session, Task <T> > service)
 {
     return(client.ExecuteServiceAsync(endpoint, elevation, TimeSpan.FromSeconds(30),
                                       service));
 }
Exemple #24
0
 /// <summary>
 /// Create server
 /// </summary>
 /// <param name="modules"></param>
 /// <param name="identity"></param>
 /// <param name="methods"></param>
 /// <param name="discovery"></param>
 /// <param name="client"></param>
 /// <param name="logger"></param>
 public PublisherDiscovery(IModuleDiscovery modules, IIdentity identity,
                           IJsonMethodClient methods, IEndpointDiscovery discovery, IEndpointServices client,
                           ILogger logger)
 {
     _identity  = identity ?? throw new ArgumentNullException(nameof(identity));
     _methods   = methods ?? throw new ArgumentNullException(nameof(methods));
     _client    = client ?? throw new ArgumentNullException(nameof(client));
     _modules   = modules ?? throw new ArgumentNullException(nameof(modules));
     _discovery = discovery ?? throw new ArgumentNullException(nameof(discovery));
     _logger    = logger ?? throw new ArgumentNullException(nameof(logger));
 }
Exemple #25
0
 /// <summary>
 /// Read value
 /// </summary>
 /// <param name="client"></param>
 /// <param name="endpoint"></param>
 /// <param name="readNode"></param>
 /// <returns></returns>
 public static Task <VariantValue> ReadValueAsync(this IEndpointServices client,
                                                  EndpointModel endpoint, string readNode)
 {
     return(ReadValueAsync(client, endpoint, null, readNode));
 }