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.