/// <inheritdoc/>
        public override async Task <Empty> Open(IAsyncStreamReader <grpc.PushTagDataPoints> requestStream, ServerCallContext context)
        {
            var pushConnectorIdAsString = context.RequestHeaders.SingleOrDefault(_ => string.Equals(_.Key, "pushconnectorid", StringComparison.InvariantCultureIgnoreCase))?.Value;

            if (string.IsNullOrEmpty(pushConnectorIdAsString))
            {
                throw new MissingConnectorIdentifierOnRequestHeader();
            }
            var pushConnectorName = context.RequestHeaders.SingleOrDefault(_ => string.Equals(_.Key, "pushconnectorname", StringComparison.InvariantCultureIgnoreCase))?.Value;

            if (string.IsNullOrEmpty(pushConnectorName))
            {
                throw new MissingConnectorNameOnRequestHeader();
            }
            var id = (ConnectorId)Guid.Parse(pushConnectorIdAsString);

            PushConnector pushConnector = null;

            try
            {
                _logger.Information($"Register connector : '{pushConnectorName}' with Id: '{id}'");
                pushConnector = new PushConnector(id, pushConnectorName);
                _pushConnectors.Register(pushConnector);

                while (await requestStream.MoveNext().ConfigureAwait(false))
                {
                    _tagDataPointCoordinator.Handle(pushConnector.Name, requestStream.Current.DataPoints);
                }
            }
            finally
            {
                if (pushConnector != null)
                {
                    _pushConnectors.Unregister(pushConnector);
                }
            }

            return(new Empty());
        }
예제 #2
0
 /// <inheritdoc/>
 public void Perform()
 {
     _pullConnectors.Register();
     _pushConnectors.Register();
 }