Advanced Events Sample

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

This sample differs from the Basic Events Sample by breaking the "event subscriber" and "event publisher" functionality into two distinct scripts. When executed, each of these scripts will contain a unique instance of a dxlclient.client.DxlClient.

Event Subscriber

The first step is to start the "event subscriber". This script will remain running and receive dxlclient.message.Event messages from the "event publisher".

To start the "event subscriber", execute the sample\advanced\event_subscriber_sample.py script as follows:

c:\dxlclient-python-sdk-5.6.0.4>python sample\advanced\event_subscriber_sample.py

The output should appear similar to the following:

2015-12-30 08:55:44,936 __main__ - INFO - Event Subscriber - Load DXL config from: c:\dxlclient-python-sdk-5.6.0.4\sample/dxlclient.config
2015-12-30 08:55:44,938 __main__ - INFO - Event Subscriber - Creating DXL Client
2015-12-30 08:55:44,956 __main__ - INFO - Event Subscriber - Connecting to Broker
2015-12-30 08:55:44,957 dxlclient.client - INFO - Waiting for broker list...
2015-12-30 08:55:44,957 dxlclient.client - INFO - Checking brokers...
2015-12-30 08:55:44,959 dxlclient.client - INFO - Trying to connect...
2015-12-30 08:55:44,959 dxlclient.client - INFO - Trying to connect to broker {Unique id: mybroker, Host name: mybroker.mcafee.com, IP address: 10.84.221.144, Port: 8883}...
2015-12-30 08:55:45,224 dxlclient.client - INFO - Connected to broker mybroker
2015-12-30 08:55:45,226 dxlclient.client - INFO - Launching event loop...
2015-12-30 08:55:45,226 dxlclient.client - INFO - Connected with result code 0
2015-12-30 08:55:45,226 dxlclient.client - INFO - Subscribing to /mcafee/client/{1d79d1a9-8efd-41f3-bc2a-bea5a34b9faa}
2015-12-30 08:55:45,229 __main__ - INFO - Event Subscriber - Subscribing to Topic: /isecg/sample/event
2015-12-30 08:55:45,229 __main__ - INFO - Adding Event callback function to Topic: /isecg/sample/event
   Enter 9 to quit
   Enter value:

The subscriber will remain running until 9 is entered to quit.

Any dxlclient.message.Event messages received by the "event publisher" will be displayed in the output.

The code for the subscriber is very similar to what is being used in the Basic Events Sample:

# Event callback class to handle incoming DXL Events
class MyEventCallback(EventCallback):
    def on_event(self, event):
        # Extract information from Event payload, in this sample we
        # expect it is UTF-8 encoded
        logger.info("Event Subscriber - Event received:\n   Topic: %s\n   Payload: %s",
                    event.destination_topic, event.payload.decode())

# Add Event callback to DXL client
logger.info("Adding Event callback function to Topic: %s", EVENT_TOPIC)
client.add_event_callback(EVENT_TOPIC, MyEventCallback())

A dxlclient.callbacks.EventCallback is registered with the client for a specific topic. By default dxlclient.client.DxlClient.add_event_callback() will also subscribe (dxlclient.client.DxlClient.subscribe()) to the same topic on the fabric.

Event Publisher

The next step is to start the "event publisher". This script must be executed in a separate command prompt (or shell), leaving the "event subscriber" running.

To start the "event publisher", execute the sample\advanced\event_publisher_sample.py script as follows:

c:\dxlclient-python-sdk-5.6.0.4>python sample\advanced\event_publisher_sample.py

The output should appear similar to the following:

2015-12-30 09:00:38,076 __main__ - INFO - Event Publisher - Load DXL config from: C:\dxlclient-python-sdk-5.6.0.4\sample/dxlclient.config
2015-12-30 09:00:38,078 __main__ - INFO - Event Publisher - Creating DXL Client
2015-12-30 09:00:38,094 __main__ - INFO - Event Publisher - Connecting to Broker
2015-12-30 09:00:38,095 dxlclient.client - INFO - Waiting for broker list...
2015-12-30 09:00:38,095 dxlclient.client - INFO - Checking brokers...
2015-12-30 09:00:38,096 dxlclient.client - INFO - Trying to connect...
2015-12-30 09:00:38,096 dxlclient.client - INFO - Trying to connect to broker {Unique id: mybroker, Host name: mybroker.mcafee.com, IP address: 10.84.221.144, Port: 8883}...
2015-12-30 09:00:38,364 dxlclient.client - INFO - Connected to broker mybroker
2015-12-30 09:00:38,365 dxlclient.client - INFO - Launching event loop...
2015-12-30 09:00:38,365 dxlclient.client - INFO - Connected with result code 0
2015-12-30 09:00:38,365 dxlclient.client - INFO - Subscribing to /mcafee/client/{41eae910-2409-4e4b-9a0f-94b54290a2cf}
   Enter 1 to publish a DXL Event
   Enter 9 to quit
   Enter value:

To publish a dxlclient.message.Event message, enter 1.

Information similar to the following should appear in the "event subscriber" output indicating that the dxlclient.message.Event message was properly received:

2015-12-30 09:03:45,444 __main__ - INFO - Event Subscriber - Event received:
   Topic: /isecg/sample/event
   Payload: Sample Event Payload

The publisher will remain running until 9 is entered to quit.

The code for the publisher is very similar to what is being used in the Basic Events Sample:

# Create the Event
logger.info("Event Publisher - Creating Event for Topic %s", EVENT_TOPIC)
event = Event(EVENT_TOPIC)

# Encode string payload as UTF-8
event.payload = "Sample Event Payload".encode()

# Publish the Event to the DXL Fabric on the Topic
logger.info("Event Publisher - Publishing Event to %s", EVENT_TOPIC)
client.send_event(event)

An dxlclient.message.Event event message is created and a payload is assigned. The event is delivered to the fabric via the dxlclient.client.DxlClient.send_event() method.