public void Start(IServiceBus bus)
		{
			if (_log.IsDebugEnabled)
				_log.DebugFormat("Starting MulticastSubscriptionClient on {0}", _uri);

			_coordinator = new SubscriptionCoordinator(_subscriptionBus, _subscriptionBus.Endpoint, _networkKey, true);
			_coordinator.Start(bus);
		}
		public void Stop()
		{
			_coordinator.Stop();
			_coordinator.Dispose();
			_coordinator = null;

			_subscriptionBus.Dispose();
			_subscriptionBus = null;
		}
		public void Stop()
		{
			if (_coordinator != null)
			{
				_coordinator.Stop();
				_coordinator.Dispose();
				_coordinator = null;
			}

			if (_subscriptionBus != null)
			{
				_subscriptionBus.Dispose();
				_subscriptionBus = null;
			}
		}
		public void Start(IServiceBus bus)
		{
			if (_log.IsInfoEnabled)
				_log.InfoFormat("Starting SubscriptionClient on {0}", bus.Endpoint.Address.Uri);

			if (_log.IsDebugEnabled)
				_log.DebugFormat("Getting endpoint for subscription service at {0}", SubscriptionServiceUri);

			_subscriptionServiceEndpoint = bus.GetEndpoint(SubscriptionServiceUri);

			VerifyClientAndServiceNotOnSameEndpoint(bus);

			_ready.Reset();

			_coordinator = new SubscriptionCoordinator(bus.ControlBus, _subscriptionServiceEndpoint, _network, false);
			_coordinator.OnRefresh += CoordinatorOnRefresh;
			_coordinator.Start(bus);

			WaitForSubscriptionServiceResponse();
		}
		void Dispose(bool disposing)
		{
			if (_disposed) return;
			if (disposing)
			{
				if (_coordinator != null)
				{
					_coordinator.Dispose();
					_coordinator = null;
				}

				if (_subscriptionBus != null)
				{
					_subscriptionBus.Dispose();
					_subscriptionBus = null;
				}
			}

			_disposed = true;
		}