Basic Event SampleΒΆ

This sample demonstrates how to register a callback to receive Event messages from the DXL fabric. Once the callback is registered, the sample sends a set number of Event messages to the fabric and waits for them all to be received by the callback.

Prior to running this sample make sure you have completed the samples configuration step (Samples Configuration).

To run this sample execute the sample\runsample script as follows:

c:\dxlclient-java-sdk-0.2.0>sample\runsample sample.basic.EventSample

The output should appear similar to the following:

Received event: 0
Received event: 1
Received event: 2
Received event: 3
Received event: 4
Received event: 5

...

Received event: 994
Received event: 995
Received event: 996
Received event: 997
Received event: 998
Received event: 999
Elapsed time (ms): 441.999912262

The code for the sample is broken into two main sections.

The first section is responsible for registering an EventCallback for a specific topic. The DxlClient.addEventCallback() method registers the callback and subscribes to the topic.

//
// Register callback and subscribe
//

// Create and add event listener
final EventCallback myEventCallback =
    event -> {
        try {
            System.out.println("Received event: "
                + new String(event.getPayload(), Message.CHARSET_UTF8));
        } catch (UnsupportedEncodingException ex) {
            ex.printStackTrace();
        }

        eventCountLock.lock();
        try {
            eventCount++;
            eventCountCondition.signalAll();

        } finally {
            eventCountLock.unlock();
        }
    };
client.addEventCallback(EVENT_TOPIC, myEventCallback);

The second section sends a set amount of Event messages via the DxlClient.sendEvent method of the DxlClient.

It then waits for all of the events to be received by the EventCallback that was previously registered.

//
// Send events
//

// Record the start time
final long startTime = System.currentTimeMillis();

// Loop and send the events
for (int count = 0; count < TOTAL_EVENTS; count++) {
    final Event event = new Event(EVENT_TOPIC);
    event.setPayload(Integer.toString(count).getBytes(Message.CHARSET_UTF8));
    client.sendEvent(event);
}

// Wait until all events have been received
System.out.println("Waiting for events to be received...");
eventCountLock.lock();
try {
    while (eventCount < TOTAL_EVENTS) {
        eventCountCondition.await();
    }
} finally {
    eventCountLock.unlock();
}

// Print the elapsed time
System.out.println("Elapsed time (ms): " + (System.currentTimeMillis() - startTime));