Tutorial: Basic Events Sample

Basic Events 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 client provisioning step.

Running the Sample

To run this sample execute the sample/basic/event-example.js script as follows:

$ node sample/basic/event-example.js

Output

The output should appear similar to the following:

Waiting for events to be received...
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): 420

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

Register Callback to Receive Events

The first section is responsible for registering an event callback for a specific topic. The addEventCallback method of the client will, by default, also subscribe to the topic.

// Create and add event listener
client.addEventCallback(EVENT_TOPIC,
  function (event) {
    // Print the payload for the received event. The toString() call converts
    // the payload from a binary Buffer into a string, decoded using UTF-8
    // character encoding.
    console.log('Received event: ' + event.payload.toString())
    // Increment the count
    eventCount++

    // Wait until all events have been received
    if (eventCount === TOTAL_EVENTS) {
      console.log('Elapsed time (ms): ' + (Date.now() - start))
      // Destroy the client - frees up resources so that the application
      // stops running
      client.destroy()
    }
  })

Send Events

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

// Connect to the fabric, supplying a callback function which is invoked
// when the connection has been established
client.connect(function () {
  // Loop and send the events
  for (var eventId = 0; eventId < TOTAL_EVENTS; eventId++) {
    // Create the event
    var event = new dxl.Event(EVENT_TOPIC)
    // Set the payload
    event.payload = eventId.toString()
    // Send the event
    client.sendEvent(event)
  }
  console.log('Waiting for events to be received...')
})

The example waits for all of the events to be received by the event callback that was previously registered. After outputting the elapsed time, the example calls the destroy method of the client to tear down client resources and end the example.