コード例 #1
0
ファイル: Program.cs プロジェクト: yanborowski/Industrial-IoT
        /// <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.");
                }
            }
        }
コード例 #2
0
        /// <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()
            });
        }
コード例 #3
0
        /// <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()
            });
        }