Basic Service SampleΒΆ
This sample demonstrates how to register a DXL service to receive dxlclient.message.Request
messages and send dxlclient.message.Response
messages back to an invoking
dxlclient.client.DxlClient
.
Prior to running this sample make sure you have completed the samples configuration step (Samples Configuration).
To run this sample execute the sample\basic\service_example.py
script as follows:
c:\dxlclient-python-sdk-5.6.0.4>python sample\basic\service_example.py
The output should appear similar to the following:
Service received request payload: ping Client received response payload: pong
The code for the sample is broken into two main sections.
The first section is responsible for creating a dxlclient.callbacks.RequestCallback
that will be
invoked for a specific topic associated with the service. The callback will send back a
dxlclient.message.Response
message with a payload of pong
for any
dxlclient.message.Request
messages that are received.
It then creates a dxlclient.service.ServiceRegistrationInfo
instance and registers the request
callback with it via the dxlclient.service.ServiceRegistrationInfo.add_topic()
method.
Finally it registers the service with the fabric via the dxlclient.client.DxlClient.register_service_sync()
method of the dxlclient.client.DxlClient
.
# # Register the service # # Create incoming request callback class MyRequestCallback(RequestCallback): def on_request(self, request): # Extract information from request print("Service received request payload: " + request.payload.decode()) # Create the response message res = Response(request) # Populate the response payload res.payload = "pong".encode() # Send the response client.send_response(res) # Create service registration object info = ServiceRegistrationInfo(client, "myService") # Add a topic for the service to respond to info.add_topic(SERVICE_TOPIC, MyRequestCallback()) # Register the service with the fabric (wait up to 10 seconds for registration to complete) client.register_service_sync(info, 10)
The second section sends a dxlclient.message.Request
message to the service
that contains a payload of ping
via the dxlclient.client.DxlClient.sync_request()
method of
the dxlclient.client.DxlClient
.
The payloads of the dxlclient.message.Request
and dxlclient.message.Response
messages
are printed.
# # Invoke the service (send a request) # # Create the request message req = Request(SERVICE_TOPIC) # Populate the request payload req.payload = "ping".encode() # Send the request and wait for a response (synchronous) res = client.sync_request(req) # Extract information from the response (if an error did not occur) if res.message_type != Message.MESSAGE_TYPE_ERROR: print("Client received response payload: " + res.payload.decode())