/** Connects to the market data server, if necessary. */
 private void connect() {
   if (marketDataClient == null || !marketDataClient.isRunning()) {
     notifyListeners(new FeedStatusNotification(getFeedStatus(), FeedStatus.UNKNOWN));
     FeedStatusNotification update =
         new FeedStatusNotification(getFeedStatus(), FeedStatus.UNKNOWN);
     try {
       boolean success =
           credentialsService.authenticateWithCredentials(
               new IAuthenticationHelper() {
                 @Override
                 public boolean authenticate(ICredentials inCredentials) {
                   marketDataClient =
                       new MarketDataRpcClientFactory()
                           .create(
                               inCredentials.getUsername(),
                               inCredentials.getPassword(),
                               hostname,
                               port,
                               new MarketDataContextClassProvider());
                   marketDataClient.start();
                   return marketDataClient.isRunning();
                 }
               });
       update.newFeedStatus = success ? FeedStatus.AVAILABLE : FeedStatus.OFFLINE;
     } catch (ConnectionException | CredentialsException | UnknownHostException e) {
       update.newFeedStatus = FeedStatus.ERROR;
       throw e;
     } catch (RuntimeException e) {
       update.newFeedStatus = FeedStatus.ERROR;
       throw e;
     } finally {
       if (marketDataClient != null) {
         marketDataClient.addServerStatusListener(MarketDataManager.this);
       }
       notifyListeners(update);
     }
   }
 }
 /* (non-Javadoc)
  * @see org.marketcetera.core.notifications.ServerStatusListener#receiveServerStatus(boolean)
  */
 @Override
 public void receiveServerStatus(boolean inStatus) {
   FeedStatusNotification update = new FeedStatusNotification(getFeedStatus(), FeedStatus.UNKNOWN);
   try {
     if (inStatus) {
       update.newFeedStatus = FeedStatus.AVAILABLE;
     } else {
       update.newFeedStatus = FeedStatus.ERROR;
       if (mMarketData != null) {
         mMarketData.reset();
       }
       if (marketDataClient != null) {
         try {
           marketDataClient.stop();
         } catch (Exception ignored) {
         }
         marketDataClient = null;
       }
     }
   } finally {
     notifyListeners(update);
   }
 }