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?

Tagged:

Best Answer

  • 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