예제 #1
0
 /// <summary>
 /// Browse by path on endpoint
 /// </summary>
 /// <param name="api"></param>
 /// <param name="endpointUrl"></param>
 /// <param name="request"></param>
 /// <param name="ct"></param>
 /// <returns></returns>
 public static Task <BrowsePathResponseApiModel> NodeBrowsePathAsync(
     this ITwinModuleApi api, string endpointUrl, BrowsePathRequestApiModel request,
     CancellationToken ct = default)
 {
     return(api.NodeBrowsePathAsync(new EndpointApiModel {
         Url = endpointUrl,
         SecurityMode = SecurityMode.None
     }, request, ct));
 }
예제 #2
0
        /// <summary>
        /// Browse all references if max references == null and user
        /// wants all. If user has requested maximum to return uses
        /// <see cref="ITwinModuleApi.NodeBrowseFirstAsync"/>
        /// </summary>
        /// <param name="service"></param>
        /// <param name="endpoint"></param>
        /// <param name="request"></param>
        /// <param name="ct"></param>
        /// <returns></returns>
        public static async Task <BrowseResponseApiModel> NodeBrowseAsync(
            this ITwinModuleApi service, EndpointApiModel endpoint,
            BrowseRequestApiModel request, CancellationToken ct = default)
        {
            if (request.MaxReferencesToReturn != null)
            {
                return(await service.NodeBrowseFirstAsync(endpoint, request));
            }
            while (true)
            {
                var result = await service.NodeBrowseFirstAsync(endpoint, request, ct);

                while (result.ContinuationToken != null)
                {
                    try {
                        var next = await service.NodeBrowseNextAsync(endpoint,
                                                                     new BrowseNextRequestApiModel {
                            ContinuationToken  = result.ContinuationToken,
                            Header             = request.Header,
                            ReadVariableValues = request.ReadVariableValues,
                            TargetNodesOnly    = request.TargetNodesOnly
                        }, ct);

                        result.References.AddRange(next.References);
                        result.ContinuationToken = next.ContinuationToken;
                    }
                    catch (Exception) {
                        await Try.Async(() => service.NodeBrowseNextAsync(endpoint,
                                                                          new BrowseNextRequestApiModel {
                            ContinuationToken = result.ContinuationToken,
                            Abort             = true
                        }));

                        throw;
                    }
                }
                return(result);
            }
        }
예제 #3
0
 /// <summary>
 /// Create adapter
 /// </summary>
 /// <param name="client"></param>
 public TwinSupervisorAdapter(ITwinModuleApi client)
 {
     _client = client ?? throw new ArgumentNullException(nameof(client));
 }
예제 #4
0
 /// <summary>
 /// Call method on endpoint
 /// </summary>
 /// <param name="api"></param>
 /// <param name="endpointUrl"></param>
 /// <param name="request"></param>
 /// <param name="ct"></param>
 /// <returns></returns>
 public static Task <MethodCallResponseApiModel> NodeMethodCallAsync(
     this ITwinModuleApi api, string endpointUrl, MethodCallRequestApiModel request,
     CancellationToken ct = default)
 {
     return(api.NodeMethodCallAsync(NewEndpoint(endpointUrl), request, ct));
 }
예제 #5
0
 /// <summary>
 /// Update using raw extension object details
 /// </summary>
 /// <param name="api"></param>
 /// <param name="endpointUrl"></param>
 /// <param name="request"></param>
 /// <param name="ct"></param>
 /// <returns></returns>
 public static Task <HistoryUpdateResponseApiModel> HistoryUpdateRawAsync(
     this ITwinModuleApi api, string endpointUrl, HistoryUpdateRequestApiModel <VariantValue> request,
     CancellationToken ct = default)
 {
     return(api.HistoryUpdateRawAsync(NewEndpoint(endpointUrl), request, ct));
 }