ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MQTT(mosquitto) Visual studio - 3 (subscriber)
    Network 2021. 3. 8. 21:20

    <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;
    }

    댓글

Designed by Tistory.