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;
            }
        }
Exemple #2
0
        async Task <HostReceiveEndpointHandle> StartEndpoint(string endpointName, IReceiveEndpoint endpoint)
        {
            try
            {
                var endpointReady = new ReceiveEndpointReadyObserver(endpoint);

                var consumeObserver         = endpoint.ConnectConsumeObserver(_consumeObservers);
                var receiveObserver         = endpoint.ConnectReceiveObserver(_receiveObservers);
                var receiveEndpointObserver = endpoint.ConnectReceiveEndpointObserver(_receiveEndpointObservers);
                var endpointHandle          = endpoint.Start();

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

                await handle.Ready.ConfigureAwait(false);

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

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

                throw;
            }
        }