Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
10 years ago.
MQTT async implementation
Hi all,
I'm trying to get the async version of MQTT to run but fail with the implementation of the callbacks. What I did so far is creating a header for my application with:
CommunicationManager.h
#define MQTTCLIENT_QOS2 1
#include "mbed.h"
#include "rtos.h"
#include "ModemManager.h"
#include "MQTTAsync.h"
#define MQTTMGR_SERVERNAME "test.domain"
#define MQTTMGR_SERVERPORT 1883
#define MQTTMGR_CLIENTID "user_001"
#define MQTTMGR_USERNAME "user_001"
#define MQTTMGR_PASSWORD "test1234"
class CommunicationManager {
public:
CommunicationManager();
void run();
private:
MQTT::Async<ModemManager, Countdown, Thread, Mutex>* mqttClient;
};
void resultHandler(MQTT::Result*);
Then I implemnt this as follows:
CommunicationManager.cpp
#include "CommunicationManager.h"
CommunicationManager::CommunicationManager()
{
}
void CommunicationManager::run() {
// Connect to MQTT Broker
MQTTPacket_connectData connData = MQTTPacket_connectData_initializer;
connData.MQTTVersion = 3; // Version 3 = MQTT version 3.1
connData.clientID.cstring = MQTTMGR_CLIENTID;
connData.username.cstring = MQTTMGR_USERNAME;
connData.password.cstring = MQTTMGR_PASSWORD;
connData.keepAliveInterval = 120;
connData.cleansession = 0;
ret = connect(resultHandler, connData);
while (true){
// TO IMPLEMENT
}
}
void resultHandler(MQTT::Result* res)
{
// TO IMPLEMENT
}
Whit this code I get the following compile errors:
- Incomplete type is not allowed "void resultHandler(MQTT::Result*);"
- Namespace "MQTT" has no member "Result" "void resultHandler(MQTT::Result*)"
- Expected an expression "void resultHandler(MQTT::Result*)"
Any ideas on how to correctly implement the async MQTT version are appreciated! Christoph
I figured it out in the meantime andit seems to work:
#include "CommunicationManager.h" CommunicationManager::CommunicationManager() { mqttClient = new MQTT::Async<ModemManager, Countdown, Thread, Mutex>(modem); } void CommunicationManager::run() { // Connect to MQTT Broker MQTTPacket_connectData connData = MQTTPacket_connectData_initializer; connData.MQTTVersion = 3; // Version 3 = MQTT version 3.1 connData.clientID.cstring = MQTTMGR_CLIENTID; connData.username.cstring = MQTTMGR_USERNAME; connData.password.cstring = MQTTMGR_PASSWORD; connData.keepAliveInterval = 120; connData.cleansession = 0; ret = mqttClient->connect(resultHandler, &connData); while (true){ // To IMPLEMENT } } void resultHandler(MQTT::Async<ModemManager, Countdown, Thread, Mutex>::Result* res) { // TO IMPLEMENT }