/// <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)); }
/// <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); } }
/// <summary> /// Create adapter /// </summary> /// <param name="client"></param> public TwinSupervisorAdapter(ITwinModuleApi client) { _client = client ?? throw new ArgumentNullException(nameof(client)); }
/// <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)); }
/// <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)); }