HostReceiveEndpointHandle StartEndpoint(string endpointName, IReceiveEndpointControl endpoint, CancellationToken cancellationToken)
        {
            try
            {
                var endpointReady = new ReceiveEndpointReadyObserver(endpoint, cancellationToken);

                var consumeObserver         = endpoint.ConnectConsumeObserver(_consumeObservers);
                var receiveObserver         = endpoint.ConnectReceiveObserver(_receiveObservers);
                var receiveEndpointObserver = endpoint.ConnectReceiveEndpointObserver(_receiveEndpointObservers);
                var publishObserver         = endpoint.ConnectPublishObserver(_publishObservers);
                var sendObserver            = endpoint.ConnectSendObserver(_sendObservers);
                var endpointHandle          = endpoint.Start();

                var handle = new Handle(endpointHandle, endpoint, endpointReady.Ready, () => Remove(endpointName),
                                        receiveObserver, receiveEndpointObserver, consumeObserver, publishObserver, sendObserver);

                lock (_mutateLock)
                    _handles.Add(endpointName, handle);

                return(handle);
            }
            catch
            {
                lock (_mutateLock)
                    _endpoints.Remove(endpointName);

                throw;
            }
        }
예제 #2
0
        void IBusHostControl.AddReceiveEndpoint(string endpointName, IReceiveEndpointControl receiveEndpoint)
        {
            if (_host == null)
            {
                throw new InvalidOperationException("The host is not ready.");
            }

            _host.AddReceiveEndpoint(endpointName, receiveEndpoint);
        }
예제 #3
0
        public void Add(string endpointName, IReceiveEndpointControl endpoint)
        {
            if (endpoint == null)
            {
                throw new ArgumentNullException(nameof(endpoint));
            }
            if (string.IsNullOrWhiteSpace(endpointName))
            {
                throw new ArgumentException($"The {nameof(endpointName)} must not be null or empty", nameof(endpointName));
            }

            lock (_mutateLock)
            {
                if (_endpoints.ContainsKey(endpointName))
                {
                    throw new ConfigurationException($"A receive endpoint with the same key was already added: {endpointName}");
                }

                _endpoints.Add(endpointName, endpoint);
            }
        }
예제 #4
0
 public void AddReceiveEndpoint(string endpointName, IReceiveEndpointControl receiveEndpoint)
 {
     ReceiveEndpoints.Add(endpointName, receiveEndpoint);
 }
예제 #5
0
 void IBusHostControl.AddReceiveEndpoint(string endpointName, IReceiveEndpointControl receiveEndpoint)
 {
     _receiveEndpoints.Add(endpointName, receiveEndpoint);
 }