/// <summary> /// List nodes on endpoint /// </summary> private static async Task ListNodesAsync(IIoTHubConfig config, ILogger logger, string deviceId, string moduleId, string endpointUrl, CancellationToken ct) { if (string.IsNullOrEmpty(endpointUrl)) { throw new ArgumentNullException(nameof(endpointUrl)); } var client = new IoTHubTwinMethodClient(CreateClient(config, logger), logger); while (!ct.IsCancellationRequested) { await Task.Delay(TimeSpan.FromSeconds(5), ct); try { var content = new GetNodesRequestModel { EndpointUrl = endpointUrl }; var result = await client.CallMethodAsync(deviceId, moduleId, "GetConfiguredNodesOnEndpoint", JsonConvertEx.SerializeObject(content), null, ct); var response = JsonConvertEx.DeserializeObject <GetNodesResponseModel>(result); logger.Information("Published nodes: {@response}", response); } catch (Exception ex) { logger.Verbose(ex, "Failed to list published nodes."); } } }
/// <inheritdoc/> public async Task <PublishedItemListResultModel> NodePublishListAsync( string endpointId, PublishedItemListRequestModel request) { if (string.IsNullOrEmpty(endpointId)) { throw new ArgumentNullException(nameof(endpointId)); } if (request == null) { throw new ArgumentNullException(nameof(request)); } var(publisherId, endpoint) = await _publishers.FindPublisherEndpoint(endpointId); var input = new GetNodesRequestModel { EndpointId = endpointId, EndpointUrl = endpoint.Url, ContinuationToken = request.ContinuationToken == null ? (ulong?)null : BitConverter.ToUInt64(request.ContinuationToken.DecodeAsBase64(), 0) }; var(errorInfo, result) = await CallMethodOnPublisherAsync(publisherId, "GetConfiguredNodesOnEndpoint", JsonConvertEx.SerializeObject(input)); if (result == null) { return(new PublishedItemListResultModel { ErrorInfo = errorInfo }); } var response = JsonConvertEx.DeserializeObject <GetNodesResponseModel>(result); return(new PublishedItemListResultModel { ContinuationToken = response.ContinuationToken == null ? null : BitConverter.GetBytes(response.ContinuationToken.Value) .ToBase64String(), Items = response.OpcNodes? .Select(s => new PublishedItemModel { NodeId = s.Id, DisplayName = s.DisplayName, PublishingInterval = s.OpcPublishingInterval == null ? (TimeSpan?)null : TimeSpan.FromMilliseconds(s.OpcPublishingInterval.Value), SamplingInterval = s.OpcSamplingInterval == null ? (TimeSpan?)null : TimeSpan.FromMilliseconds(s.OpcSamplingInterval.Value), }).ToList() }); }
/// <inheritdoc/> public async Task <PublishedItemListResultModel> NodePublishListAsync( EndpointModel endpoint, PublishedItemListRequestModel request) { if (endpoint == null) { throw new ArgumentNullException(nameof(endpoint)); } if (request == null) { throw new ArgumentNullException(nameof(request)); } GetUserNamePassword(endpoint.User, out var user, out var password); if (_client == null) { await StartAsync(); } var input = new GetNodesRequestModel { EndpointUrl = endpoint.Url, ContinuationToken = request.ContinuationToken == null ? (ulong?)null : BitConverter.ToUInt64(request.ContinuationToken.DecodeAsBase64(), 0) }; var(errorInfo, result) = await _client.CallMethodAsync( "GetConfiguredNodesOnEndpoint", JsonConvertEx.SerializeObject(input), null); if (result == null) { return(new PublishedItemListResultModel { ErrorInfo = errorInfo }); } var response = JsonConvertEx.DeserializeObject <GetNodesResponseModel>(result); return(new PublishedItemListResultModel { ContinuationToken = response.ContinuationToken == null ? null : BitConverter.GetBytes(response.ContinuationToken.Value) .ToBase64String(), Items = response.OpcNodes? .Select(s => new PublishedItemModel { NodeId = FromPublisherNodeId(s.Id), PublishingInterval = s.OpcPublishingInterval, SamplingInterval = s.OpcSamplingInterval }).ToList() }); }