예제 #1
0
        /// <inheritdoc/>
        public async Task <PublishStopResultModel> NodePublishStopAsync(
            string endpoint, PublishStopRequestModel request)
        {
            var result = await _client.NodePublishStopAsync(endpoint,
                                                            Map <PublishStopRequestApiModel>(request));

            return(Map <PublishStopResultModel>(result));
        }
        /// <inheritdoc/>
        public async Task <PublishStopResultModel> NodePublishStopAsync(
            string endpoint, PublishStopRequestModel request)
        {
            var result = await _client.NodePublishStopAsync(endpoint,
                                                            request.ToApiModel());

            return(result.ToServiceModel());
        }
예제 #3
0
        /// <inheritdoc/>
        public async Task <PublishStopResultModel> NodePublishStopAsync(
            string endpoint,
            PublishStopRequestModel request,
            CancellationToken ct = default
            )
        {
            var result = await _client.NodePublishStopAsync(endpoint,
                                                            request.ToApiModel(), ct);

            return(result.ToServiceModel());
        }
예제 #4
0
        /// <inheritdoc/>
        public async Task <PublishStopResultModel> NodePublishStopAsync(string endpointId,
                                                                        PublishStopRequestModel request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }
            var result = await CallServiceOnTwin <PublishStopRequestModel, PublishStopResultModel>(
                "PublishStop_V2", endpointId, request);

            return(result);
        }
 /// <summary>
 /// Create api model from service model
 /// </summary>
 /// <param name="model"></param>
 public PublishStopRequestApiModel(PublishStopRequestModel model)
 {
     if (model == null)
     {
         throw new ArgumentNullException(nameof(model));
     }
     NodeId        = model.NodeId;
     BrowsePath    = model.BrowsePath;
     NodeAttribute = model.NodeAttribute;
     Diagnostics   = model.Diagnostics == null ? null :
                     new DiagnosticsApiModel(model.Diagnostics);
 }
        /// <inheritdoc/>
        public async Task <PublishStopResultModel> NodePublishStopAsync(
            EndpointRegistrationModel registration, PublishStopRequestModel request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }
            var result = await CallServiceOnSupervisor <PublishStopRequestModel, PublishStopResultModel>(
                "PublishStop_V2", registration, request);

            return(result);
        }
예제 #7
0
        /// <inheritdoc/>
        public async Task <PublishStopResultModel> NodePublishStopAsync(
            string endpointId, PublishStopRequestModel request)
        {
            kNodePublishStop.Inc();
            if (string.IsNullOrEmpty(endpointId))
            {
                throw new ArgumentNullException(nameof(endpointId));
            }
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }
            if (string.IsNullOrEmpty(request.NodeId))
            {
                throw new ArgumentNullException(nameof(request.NodeId));
            }

            var endpoint = await _endpoints.GetEndpointAsync(endpointId);

            if (endpoint == null)
            {
                throw new ArgumentException("Invalid endpointId");
            }
            var result = await _jobs.NewOrUpdateJobAsync(GetDefaultId(endpointId), job => {
                // remove from job
                var publishJob = AsJob(job);
                var jobChanged = RemoveItemFromJob(publishJob, request.NodeId,
                                                   new ConnectionModel {
                    Endpoint    = endpoint.Registration.Endpoint,
                    Diagnostics = request.Header?.Diagnostics,
                    User        = request.Header?.Elevation
                });

                if (jobChanged)
                {
                    job.JobConfiguration = _serializer.SerializeJobConfiguration(
                        publishJob, out var jobType);
                    job.JobConfigurationType = jobType;
                    if (publishJob.WriterGroup.DataSetWriters.Count == 0 &&
                        job.LifetimeData.Status == JobStatus.Active)
                    {
                        job.LifetimeData.Status = JobStatus.Canceled;
                    }
                    job.Demands = PublisherDemands(endpoint);
                }
                return(Task.FromResult(jobChanged));
            });

            return(new PublishStopResultModel());
        }
예제 #8
0
        /// <inheritdoc/>
        public async Task <PublishStopResultModel> NodePublishStopAsync(
            string endpointId, PublishStopRequestModel request)
        {
            if (string.IsNullOrEmpty(endpointId))
            {
                throw new ArgumentNullException(nameof(endpointId));
            }
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }
            if (string.IsNullOrEmpty(request.NodeId))
            {
                throw new ArgumentNullException(nameof(request.NodeId));
            }

            // Check whether publishing
            var publishing = await IsPublishingAsync(endpointId, request.NodeId);

            if (!publishing)
            {
                return(new PublishStopResultModel {
                    ErrorInfo = new ServiceResultModel {
                        ErrorMessage = "Node is not published"
                    }
                });
            }

            var(publisherId, endpoint) = await _publishers.FindPublisherEndpoint(endpointId);

            var content = new UnpublishNodesRequestModel {
                EndpointUrl = endpoint.Url,
                EndpointId  = endpointId,
                OpcNodes    = new List <PublisherNodeModel> {
                    new PublisherNodeModel {
                        Id = request.NodeId
                    }
                }
            };

            var(errorInfo, _) = await CallMethodOnPublisherAsync(publisherId,
                                                                 "UnpublishNodes", JsonConvertEx.SerializeObject(content));

            return(new PublishStopResultModel {
                ErrorInfo = errorInfo
            });
        }
        /// <inheritdoc/>
        public async Task <PublishStopResultModel> NodePublishStopAsync(
            EndpointModel endpoint, PublishStopRequestModel request)
        {
            if (endpoint == null)
            {
                throw new ArgumentNullException(nameof(endpoint));
            }
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }
            if (string.IsNullOrEmpty(request.NodeId))
            {
                throw new ArgumentNullException(nameof(request.NodeId));
            }

            // Check whether publishing
            var publishing = await IsPublishingAsync(endpoint, request.NodeId);

            if (!publishing)
            {
                return(new PublishStopResultModel {
                    ErrorInfo = new ServiceResultModel {
                        ErrorMessage = "Node is not published"
                    }
                });
            }

            var content = new PublishNodesRequestModel {
                EndpointUrl = endpoint.Url,
                OpcNodes    = new List <PublisherNodeModel> {
                    new PublisherNodeModel {
                        Id = ToPublisherNodeId(request.NodeId)
                    }
                }
            };

            System.Diagnostics.Debug.Assert(_client != null);
            var(errorInfo, _) = await _client.CallMethodAsync("UnpublishNodes",
                                                              JsonConvertEx.SerializeObject(content), request.Diagnostics);

            return(new PublishStopResultModel {
                ErrorInfo = errorInfo
            });
        }
예제 #10
0
 /// <inheritdoc/>
 public Task <PublishStopResultModel> NodePublishStopAsync(string endpointId,
                                                           PublishStopRequestModel request)
 {
     return(_publish.NodePublishStopAsync(Endpoint, request));
 }
예제 #11
0
        /// <inheritdoc/>
        public async Task <PublishStopResultModel> NodePublishStopAsync(
            string endpointId,
            PublishStopRequestModel request,
            CancellationToken ct = default
            )
        {
            kNodePublishStop.Inc();
            if (string.IsNullOrEmpty(endpointId))
            {
                throw new ArgumentNullException(nameof(endpointId));
            }
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }
            if (string.IsNullOrEmpty(request.NodeId))
            {
                throw new ArgumentNullException(nameof(request.NodeId));
            }

            var endpoint = await _endpoints.GetEndpointAsync(endpointId, ct : ct);

            if (endpoint == null)
            {
                throw new ArgumentException("Invalid endpointId");
            }

            var jobChanged = false;
            var jobId      = GetDefaultId(endpointId);
            await _jobs.NewOrUpdateJobAsync(jobId, job => {
                // remove from job
                var publishJob = AsJob(job);
                var connection = new ConnectionModel {
                    Endpoint    = endpoint.Registration.Endpoint,
                    Diagnostics = request.Header?.Diagnostics,
                    User        = request.Header?.Elevation
                };
                jobChanged = RemoveItemFromJob(publishJob, request.NodeId, connection);

                if (jobChanged)
                {
                    job.JobConfiguration = _serializer.SerializeJobConfiguration(
                        publishJob, out var jobType);
                    job.JobConfigurationType = jobType;
                    if (publishJob.WriterGroup.DataSetWriters.Count == 0 &&
                        job.LifetimeData.Status == JobStatus.Active)
                    {
                        job.LifetimeData.Status = JobStatus.Canceled;
                    }
                    job.Demands = PublisherDemands(endpoint);
                }

                // Return whether the provided job has been changed or not.
                return(Task.FromResult(jobChanged));
            }, ct);

            if (!jobChanged)
            {
                throw new ResourceNotFoundException($"Job does not contain node id: {request.NodeId}");
            }

            return(new PublishStopResultModel());
        }
 /// <inheritdoc/>
 public Task <PublishStopResultModel> NodePublishStopAsync(
     T endpoint, PublishStopRequestModel request)
 {
     return(Task.FromResult(new PublishStopResultModel()));
 }