/** 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); } }