Register a handler for broken connections
Agent
| Name | Type | Description |
|---|---|---|
| callback | Function |
Optional function to be called upon the loss of a connection
|
Nothing
This method allows you to register a function that will be called whenever an open connection fails for any reason.
The provided function has one (optional) parameter: reasonCode. If included, this will be passed an integer that indicates the reason for the connection loss. Possible values are:
| Value | Reason |
|---|---|
| -1 | The socket connection failed. This signals either a network issue, or that the broker chose to abort the connection |
| -2 | The inbound message rate was exceeded. See MQTT rate limits |
| -3 | the inbound maximum message size (currently 256KB) was exceeded |
| -4 | The MQTT message was incorrectly framed, eg. the message header was invalid or out of spec |
Only one callback function may be registered at any one time. To clear a previously registered callback, either provide a new function, or pass in null.
The following code sets up an MQTT client and connects to the specified MQTT broker. It uses mqttclient.onconnectionlost() to warn the user if the connection is unexpectedly broken.
// CONSTANTS
const url = "tcp://test.mosquitto.org";
const port = 1883
const cid = "imp.mqtt.test." + imp.configparams.deviceid;
const un = "generalgrugger";
const pw = "gaztakh1ghc0mmand";
// GLOBALS
local client = null;
// FUNCTIONS
function error(code) {
switch (code) {
case -1: return "Socket Error";
case 1: return "Unsupported MQTT version";
case 2: return "Client ID rejected";
case 3: return "Server unavailable";
case 4: return "Invalid username/password";
case 5: return "Not authorized";
default: return "Unknown error";
}
}
function onMessage(message) {
// Called on receipt of a message
server.log("Message \'" + message.message + "\' received under topic \'" + message.topic + "\'");
}
function onConnect(resultCode) {
// Called when the client connects (or fails to connect) to the MQTT broker
local s = url + ":" + port.tostring();
if (resultCode == 0) {
server.log("Connected to " + s);
// We're connected to try to subscribe to a topic
client.subscribe("imp.mqtt.test.pings",
mqtt.AT_MOST_ONCE,
function(qosMode) {
// This is the subscription acknowledgement callback
if (qosMode != 0x80) {
client.onmessage(onMessage);
}
},
false);
}
}
function onLost(reasonCode) {
// Called when the connection to the MQTT broker is unexpectedly lost
local s = url + ":" + port.tostring();
server.log("Connected to " + s + " broken. Code: " + reasonCode);
}
// RUNTIME START
// Instance an MQTT client
client = mqtt.createclient();
// Set up the initial handlers
client.onconnect(onConnect);
client.onconnectionlost(onLost);
// Connect with credentials
local options = {};
options.username <- un;
options.password <- pw;
client.connect(url + ":" + port.tostring(), cid, options);