question

Upvotes
Accepted
129 6 14 23

How to know when my SSL consumer application is disconnected from the server?

When my application has been disconnected from the server, I would like to get an alert. Is it possible to do this?

treprfarfa-api
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 5.0 MiB each and 10.0 MiB total.

1 Answer

Upvotes
Accepted
9.5k 10 5 7

Hello @Akechi Sato

Market Data interfaces used by SSL consumer applications provide Connection Events which represents events associated with a connection. An application can register its interest via registerClient(..) in notifications of changes in connection statuses. As soon as it registers its interest, it will receive information about existing connections. Then every time a connection status changes e.g. from connect to disconnect, the application will be notified via Connection Events.

The application should register the Connection Events with different Event Queue and different MarketDataSubscriber from the one for MarketDataItem Events. Hence, the Connection Events are dispatched in timely manner when the connection/disconnection occurs. Otherwise, the application may be notified late because it has to dispatch all MarketDataItem Events which are put 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 Connection Events:

// 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 status
MarketDataSubscriberInterestSpec 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 RFA resource 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 2017
Received 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 2017
Received CONNECTION_EVENT: SSLNamespace::pageSSLConn  { state: DOWN, code: NONE, text: "Not connected: Channel disconnected"}
The application is disconnecting from the server

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 5.0 MiB each and 10.0 MiB total.

Click below to post an Idea Post Idea