#define MQTTCLIENT_QOS2 1 #include #include "MQTTClient.h" #define DEFAULT_STACK_SIZE -1 #include "linux.cpp" int arrivedcount = 0; void messageArrived(MQTT::MessageData& md) { MQTT::Message &message = md.message; printf("Message %d arrived: qos %d, retained %d, dup %d, packetid %d\n", ++arrivedcount, message.qos, message.retained, message.dup, message.id); printf("Payload %.*s\n", (int)message.payloadlen, (char*)message.payload); } int main(int argc, char* argv[]) { IPStack ipstack = IPStack(); float version = 0.3; const char* topic = "mbed-sample"; printf("Version is %f\n", version); MQTT::Client client = MQTT::Client(ipstack); const char* hostname = "iot.eclipse.org"; int port = 1883; printf("Connecting to %s:%d\n", hostname, port); int rc = ipstack.connect(hostname, port); if (rc != 0) printf("rc from TCP connect is %d\n", rc); printf("MQTT connecting\n"); MQTTPacket_connectData data = MQTTPacket_connectData_initializer; data.MQTTVersion = 3; data.clientID.cstring = (char*)"mbed-icraggs"; rc = client.connect(data); if (rc != 0) printf("rc from MQTT connect is %d\n", rc); printf("MQTT connected\n"); rc = client.subscribe(topic, MQTT::QOS2, messageArrived); if (rc != 0) printf("rc from MQTT subscribe is %d\n", rc); MQTT::Message message; // QoS 0 char buf[100]; sprintf(buf, "Hello World! QoS 0 message from app version %f", version); message.qos = MQTT::QOS0; message.retained = false; message.dup = false; message.payload = (void*)buf; message.payloadlen = strlen(buf)+1; rc = client.publish(topic, message); if (rc != 0) printf("Error %d from sending QoS 0 message\n", rc); else while (arrivedcount == 0) client.yield(100); // QoS 1 printf("Now QoS 1\n"); sprintf(buf, "Hello World! QoS 1 message from app version %f", version); message.qos = MQTT::QOS1; message.payloadlen = strlen(buf)+1; rc = client.publish(topic, message); if (rc != 0) printf("Error %d from sending QoS 1 message\n", rc); else while (arrivedcount == 1) client.yield(100); // QoS 2 sprintf(buf, "Hello World! QoS 2 message from app version %f", version); message.qos = MQTT::QOS2; message.payloadlen = strlen(buf)+1; rc = client.publish(topic, message); if (rc != 0) printf("Error %d from sending QoS 2 message\n", rc); while (arrivedcount == 2) client.yield(100); rc = client.unsubscribe(topic); if (rc != 0) printf("rc from unsubscribe was %d\n", rc); rc = client.disconnect(); if (rc != 0) printf("rc from disconnect was %d\n", rc); ipstack.disconnect(); printf("Finishing with %d messages received\n", arrivedcount); return 0; }