Response Handler Function

This section describes how to handle the messages or commands received from the cloud side.

IoT communication is bidirectional i.e. device to cloud and cloud to device. So far we have seen how to generate messages and send it your IoT platform. Let's discuss how to handle the messages or commands coming from the server side. The handling of these messages are specific to the protocol in use, however the common function remains the same.

function (topic, response, state)
{
console.log("Received a message on subscribed topic ", topic)
state.received++;
state.recv_queue.push(response);
}

It is important to understand that while a simulation is running, the handler may be invoked asynchronously. This is because the command from the server side could be initiated anytime. To be on the safer side and avoid any race condition, the subscription handler should be small and defer all actions to be executed in the next iteration call. In above example, we have simply produced a log and pushed the received message to the receive queue.

Note that subscription handler do not need to return any value.

Subscription handler could be invoked multiple time asynchronously while your simulation is running. That's why result of subscription should be stored in a queue rather than being processed as a second run could overwrite the previous run results.

Since response handler signature is common across all protocols and have a common argument (topic, response, state), lets have a look at how these parameters are actually mapped for each protocol

Protocol

topic

response

MQTT

MQTT Topic (string)

Payload received from server (string)

HTTP

HTTP URL (string)

Body of the response from server (string)

CoAP

CoAP topic (string)

CoAP payload as (string)

TCP/UDP

undefined

payload received from server (string)

CoAP

CoAP Topic (string)

payload received from server (string)

Response Handler for MQTT

In MQTT, a client could subscribe to any particular topic. The subscription topic can be specified in the template by enabling subscription checkbox below message function. When a publication is received on the chosen topic, the subscription handler is invoked with

function(topic, response, state)
{
//topic - The MQTT topic on which subscription has been received
//response - A buffer object which is sent for the subscription
// state - reference to the current state object for the client
}

Response Handler for HTTP

In HTTP the custom handler is invoked with the result of the operation performed. E.g. if you did a POST operation, you could handle the response sent by the server.

function(topic, response, state)
{
//topic - The URL for which operation was perfomed
//response - A buffer object which is sent by the server
// state - reference to the current state object for the client
}

Response Handler for Raw (TCP/UDP)

In the case of the raw protocols, the custom handler is invoked with the result of every response received.

function(topic, response, state)
{
// topic - undefined, doesn't exist for TCP/UDP
//response - A string which is sent by the server
// state - reference to the current state object for the client
}

Response Handler for CoAP

CoAP handlers are invoked both as a response and as a result of observation of a particular resource endpoint.

function(topic, response, state)
{
// topic - The URL for which operation was perfomed
//response - A buffer object which is sent by the server
// state - reference to the current state object for the client
}