<Header>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <mosquitto.h>
#define sleep(x) Sleep((x)*1000)
#define strdup _strdup
#define IN_BUF_LENGTH 65536
#define DEFAULT_MQTT_HOST "127.0.0.1"
#define DEFAULT_MQTT_PORT 1883
#define DEFAULT_MQTT_KEEPALIVE 60
#define DEFAULT_MQTT_TOPIC "EXAMPLE_TOPIC"
static bool run = true;
<Callback Function>
void connect_callback(struct mosquitto *mosq, void *obj, int result) {
printf("connect callback, rc=%d\n", result);
}
void message_callback(struct mosquitto *mosq, void *obj, const struct mosquitto_message *msg) {
if (msg->payloadlen == 0) return;
fprintf(stdout, "topic '%s': message %d bytes\n", msg->topic, msg->payloadlen);
fprintf(stderr, "message : '%s'\n", (char *)msg->payload);
}
<main>
int main(int argc, char **argv)
{
char *mqtt_host = strdup(DEFAULT_MQTT_HOST);
char *mqtt_topic = strdup(DEFAULT_MQTT_TOPIC);
int mqtt_port = DEFAULT_MQTT_PORT;
int mqtt_keepalive = DEFAULT_MQTT_KEEPALIVE;
int mdelay = 0;
bool clean_session = true;
struct mosquitto *mosq = NULL;
mosquitto_lib_init();
mosq = mosquitto_new(NULL, clean_session, NULL);
if (!mosq) {
fprintf(stderr, "Could not create new mosquitto struct\n");
exit(1);
}
mosquitto_connect_callback_set(mosq, connect_callback);
mosquitto_message_callback_set(mosq, message_callback);
if (mosquitto_connect(mosq, mqtt_host, mqtt_port, mqtt_keepalive)) {
fprintf(stderr, "Unable to connect mosquitto.\n");
exit(1);
}
mosquitto_subscribe(mosq, NULL, mqtt_topic, 0);
while (run) {
int loop = mosquitto_loop(mosq, -1, 1);
if (loop) {
fprintf(stderr, "mosquitto connection error!\n");
sleep(1);
mosquitto_reconnect(mosq);
}
}
mosquitto_destroy(mosq);
mosquitto_lib_cleanup();
free(mqtt_host);
free(mqtt_topic);
return 0;
}