-
Notifications
You must be signed in to change notification settings - Fork 0
/
mosquittopp_client.cpp
80 lines (67 loc) · 1.65 KB
/
mosquittopp_client.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include "mosquittopp_client.h"
#define PUBLISH_TOPIC "EXAMPLE_TOPIC"
#ifdef DEBUG
#include <iostream>
#endif
mqtt_client::mqtt_client(const char *id, const char *host, int port) : mosquittopp(id)
{
int keepalive = DEFAULT_KEEP_ALIVE;
connect(host, port, keepalive);
}
mqtt_client::~mqtt_client()
{
}
void mqtt_client::on_connect(int rc)
{
if (!rc)
{
#ifdef DEBUG
std::cout << "Connected - code " << rc << std::endl;
#endif
}
}
void mqtt_client::on_subscribe(int mid, int qos_count, const int *granted_qos)
{
#ifdef DEBUG
std::cout << "Subscription succeeded." << std::endl;
#endif
}
void mqtt_client::on_message(const struct mosquitto_message *message)
{
int payload_size = MAX_PAYLOAD + 1;
char buf[51];
if (!strcmp(message->topic, PUBLISH_TOPIC))
{
memset(buf, 0, payload_size * sizeof(char));
/* Copy N-1 bytes to ensure always 0 terminated. */
memcpy(buf, message->payload, MAX_PAYLOAD * sizeof(char));
#ifdef DEBUG
std::cout << buf << std::endl;
#endif
// Examples of messages for M2M communications...
if (!strcmp(buf, "STATUS"))
{
snprintf(buf, payload_size, "This is a Status Message...");
publish(NULL, PUBLISH_TOPIC, strlen(buf), buf);
#ifdef DEBUG
std::cout << "Status Request Recieved." << std::endl;
#endif
}
if (!strcmp(buf, "ON"))
{
snprintf(buf, payload_size, "Turning on...");
publish(NULL, PUBLISH_TOPIC, strlen(buf), buf);
#ifdef DEBUG
std::cout << "Request to turn on." << std::endl;
#endif
}
if (!strcmp(buf, "OFF"))
{
snprintf(buf, payload_size, "Turning off...");
publish(NULL, PUBLISH_TOPIC, strlen(buf), buf);
#ifdef DEBUG
std::cout << "Request to turn off." << std::endl;
#endif
}
}
}