Skip to content

Commit 0527344

Browse files
committed
Add support for using std::function callbacks instead of C-pointers
1 parent 4f855f2 commit 0527344

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

Diff for: src/MqttClient.cpp

+15
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,17 @@ MqttClient::~MqttClient()
9797
}
9898
}
9999

100+
#ifdef MQTT_CLIENT_STD_FUNCTION_CALLBACK
101+
void MqttClient::onMessage(MqttMessageCallback callback)
102+
{
103+
_onMessage = callback;
104+
}
105+
#else
100106
void MqttClient::onMessage(void(*callback)(int))
101107
{
102108
_onMessage = callback;
103109
}
110+
#endif
104111

105112
int MqttClient::parseMessage()
106113
{
@@ -550,7 +557,11 @@ void MqttClient::poll()
550557
_rxState = MQTT_CLIENT_RX_STATE_READ_PUBLISH_PAYLOAD;
551558

552559
if (_onMessage) {
560+
#ifdef MQTT_CLIENT_STD_FUNCTION_CALLBACK
561+
_onMessage(this,_rxLength);
562+
#else
553563
_onMessage(_rxLength);
564+
#endif
554565

555566
if (_rxLength == 0) {
556567
_rxState = MQTT_CLIENT_RX_STATE_READ_TYPE;
@@ -573,7 +584,11 @@ void MqttClient::poll()
573584
_rxState = MQTT_CLIENT_RX_STATE_READ_PUBLISH_PAYLOAD;
574585

575586
if (_onMessage) {
587+
#ifdef MQTT_CLIENT_STD_FUNCTION_CALLBACK
588+
_onMessage(this,_rxLength);
589+
#else
576590
_onMessage(_rxLength);
591+
#endif
577592
}
578593

579594
if (_rxLength == 0) {

Diff for: src/MqttClient.h

+16
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,24 @@
3232
#define MQTT_BAD_USER_NAME_OR_PASSWORD 4
3333
#define MQTT_NOT_AUTHORIZED 5
3434

35+
// Make this definition in your application code to use std::functions for onMessage callbacks instead of C-pointers:
36+
// #define MQTT_CLIENT_STD_FUNCTION_CALLBACK
37+
38+
#ifdef MQTT_CLIENT_STD_FUNCTION_CALLBACK
39+
#include <functional>
40+
#endif
41+
3542
class MqttClient : public Client {
3643
public:
3744
MqttClient(Client& client);
3845
virtual ~MqttClient();
3946

47+
#ifdef MQTT_CLIENT_STD_FUNCTION_CALLBACK
48+
typedef std::function<void(MqttClient *client, int messageSize)> MessageCallback;
49+
void onMessage(MessageCallback callback);
50+
#else
4051
void onMessage(void(*)(int));
52+
#endif
4153

4254
int parseMessage();
4355
String messageTopic() const;
@@ -128,7 +140,11 @@ class MqttClient : public Client {
128140
private:
129141
Client* _client;
130142

143+
#ifdef MQTT_CLIENT_STD_FUNCTION_CALLBACK
144+
MqttClient::MessageCallback _onMessage;
145+
#else
131146
void (*_onMessage)(int);
147+
#endif
132148

133149
String _id;
134150
String _username;

0 commit comments

Comments
 (0)