When my application has been disconnected from the server, Iwould like to get an alert. Is it possible to do this?
Hello @Akechi Sato
Market Data interfaces used by SSL consumer applications provideConnection Events which represents events associated with a connection. Anapplication can register its interest via registerClient(..) in notificationsof changes in connection statuses. As soon as it registers its interest, itwill receive information about existing connections. Then every time aconnection status changes e.g. from connect to disconnect, the application willbe notified via Connection Events.
The application should register the Connection Events withdifferent Event Queue and different MarketDataSubscriber from the one forMarketDataItem Events. Hence, the Connection Events are dispatched in timelymanner when the connection/disconnection occurs. Otherwise, the application maybe notified late because it has to dispatch all MarketDataItem Events which areput in the same queue prior to the Connection Events first.
The example source code is shown below:
1. Initializing RFA resource and registering for the ConnectionEvents:
// RFA objects for Connection Events protected EventQueue _conEventQueue;protected MarketDataSubscriber _conMarketDataSubscriber;protected Handle _conmdsClientHandle;…//Initialize RFA objects for Connection Events _conEventQueue = EventQueue.create("EventQueue for connection Event");_conMarketDataSubscriber = (MarketDataSubscriber)_session .createEventSource(EventSource.MARKET_DATA_SUBSCRIBER, "MarketDataSubscriber for connection event",true, _standardPI);//Register for connection statusMarketDataSubscriberInterestSpec conmarketDataSubscriberInterestSpec = new MarketDataSubscriberInterestSpec();conmarketDataSubscriberInterestSpec.setConnectionInterest(true);_conmdsClientHandle = _conMarketDataSubscriber.registerClient(_conEventQueue, conmarketDataSubscriberInterestSpec, myClient, null);
2. Dispatching the Connection Events from its queue:
while ((System.currentTimeMillis() - startTime) < _runTime * 1000)try{ … _conEventQueue.dispatch(1000);}catch (DispatchException de){ System.out.println("Queue deactivated"); return;}
3. Processing the Connection Events:
public void processEvent(Event event){ switch (event.getType()) { … case Event.CONNECTION_EVENT: processConnectionEvent((ConnectionEvent)event); break; … }}protected void processConnectionEvent(ConnectionEvent connectionEvent){ System.out.println(new Date()); System.out.print("Received CONNECTION_EVENT: " + connectionEvent.getConnectionName()); System.out.println(" " + connectionEvent.getConnectionStatus().toString()); if(connectionEvent.getConnectionStatus().getState() == ConnectionStatus.DOWN) { System.out.println("The application is disconnecting from the server”); } else if (connectionEvent.getConnectionStatus().getState() == ConnectionStatus.UP) { System.out.println("The application is connecting to the server”); }}
4.Unregistering for the Connection Events and Releasing RFAresource before the application exits
//cleanup RFA objects for connection status_conMarketDataSubscriber.unregisterClient( _conmdsClientHandle);_conMarketDataSubscriber.destroy();_conEventQueue.deactivate();
The example output when the application connects the server:
Wed Jul 26 17:11:53 ICT 2017Received CONNECTION_EVENT: SSLNamespace::pageSSLConn { state: UP, code: NONE, text: "192.168.27.55"}The application is connecting to the server
The example output when it has been disconnected from the server:
Wed Jul 26 17:15:06 ICT 2017Received CONNECTION_EVENT: SSLNamespace::pageSSLConn { state: DOWN, code: NONE, text: "Not connected: Channel disconnected"}The application is disconnecting from the server