1publish(3)                 Library Functions Manual                 publish(3)
2
3
4

NAME

6       publish - Publication example
7
8       #include <stdio.h>
9       #include <stdlib.h>
10       #include <string.h>
11       #include "MQTTAsync.h"
12
13       #if !defined(_WIN32)
14       #include <unistd.h>
15       #else
16       #include <windows.h>
17       #endif
18
19       #if defined(_WRS_KERNEL)
20       #include <OsWrapper.h>
21       #endif
22
23       #define ADDRESS     "tcp://mqtt.eclipse.org:1883"
24       #define CLIENTID    "ExampleClientPub"
25       #define TOPIC       "MQTT Examples"
26       #define PAYLOAD     "Hello World!"
27       #define QOS         1
28       #define TIMEOUT     10000L
29
30       int finished = 0;
31
32       void connlost(void *context, char *cause)
33       {
34               MQTTAsync client = (MQTTAsync)context;
35               MQTTAsync_connectOptions conn_opts = MQTTAsync_connectOptions_initializer;
36               int rc;
37
38               printf("\nConnection lost\n");
39               printf("     cause: %s\n", cause);
40
41               printf("Reconnecting\n");
42               conn_opts.keepAliveInterval = 20;
43               conn_opts.cleansession = 1;
44               if ((rc = MQTTAsync_connect(client, &conn_opts)) != MQTTASYNC_SUCCESS)
45               {
46                       printf("Failed to start connect, return code %d\n", rc);
47                       finished = 1;
48               }
49       }
50
51       void onDisconnectFailure(void* context, MQTTAsync_failureData* response)
52       {
53               printf("Disconnect failed\n");
54               finished = 1;
55       }
56
57       void onDisconnect(void* context, MQTTAsync_successData* response)
58       {
59               printf("Successful disconnection\n");
60               finished = 1;
61       }
62
63       void onSendFailure(void* context, MQTTAsync_failureData* response)
64       {
65               MQTTAsync client = (MQTTAsync)context;
66               MQTTAsync_disconnectOptions opts = MQTTAsync_disconnectOptions_initializer;
67               int rc;
68
69               printf("Message send failed token %d error code %d\n", response->token, response->code);
70               opts.onSuccess = onDisconnect;
71               opts.onFailure = onDisconnectFailure;
72               opts.context = client;
73               if ((rc = MQTTAsync_disconnect(client, &opts)) != MQTTASYNC_SUCCESS)
74               {
75                       printf("Failed to start disconnect, return code %d\n", rc);
76                       exit(EXIT_FAILURE);
77               }
78       }
79
80       void onSend(void* context, MQTTAsync_successData* response)
81       {
82               MQTTAsync client = (MQTTAsync)context;
83               MQTTAsync_disconnectOptions opts = MQTTAsync_disconnectOptions_initializer;
84               int rc;
85
86               printf("Message with token value %d delivery confirmed\n", response->token);
87               opts.onSuccess = onDisconnect;
88               opts.onFailure = onDisconnectFailure;
89               opts.context = client;
90               if ((rc = MQTTAsync_disconnect(client, &opts)) != MQTTASYNC_SUCCESS)
91               {
92                       printf("Failed to start disconnect, return code %d\n", rc);
93                       exit(EXIT_FAILURE);
94               }
95       }
96
97
98       void onConnectFailure(void* context, MQTTAsync_failureData* response)
99       {
100               printf("Connect failed, rc %d\n", response ? response->code : 0);
101               finished = 1;
102       }
103
104
105       void onConnect(void* context, MQTTAsync_successData* response)
106       {
107               MQTTAsync client = (MQTTAsync)context;
108               MQTTAsync_responseOptions opts = MQTTAsync_responseOptions_initializer;
109               MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
110               int rc;
111
112               printf("Successful connection\n");
113               opts.onSuccess = onSend;
114               opts.onFailure = onSendFailure;
115               opts.context = client;
116               pubmsg.payload = PAYLOAD;
117               pubmsg.payloadlen = (int)strlen(PAYLOAD);
118               pubmsg.qos = QOS;
119               pubmsg.retained = 0;
120               if ((rc = MQTTAsync_sendMessage(client, TOPIC, &pubmsg, &opts)) != MQTTASYNC_SUCCESS)
121               {
122                       printf("Failed to start sendMessage, return code %d\n", rc);
123                       exit(EXIT_FAILURE);
124               }
125       }
126
127       int messageArrived(void* context, char* topicName, int topicLen, MQTTAsync_message* m)
128       {
129               // not expecting any messages
130               return 1;
131       }
132
133       int main(int argc, char* argv[])
134       {
135               MQTTAsync client;
136               MQTTAsync_connectOptions conn_opts = MQTTAsync_connectOptions_initializer;
137               int rc;
138
139               if ((rc = MQTTAsync_create(&client, ADDRESS, CLIENTID, MQTTCLIENT_PERSISTENCE_NONE, NULL)) != MQTTASYNC_SUCCESS)
140               {
141                       printf("Failed to create client object, return code %d\n", rc);
142                       exit(EXIT_FAILURE);
143               }
144
145               if ((rc = MQTTAsync_setCallbacks(client, NULL, connlost, messageArrived, NULL)) != MQTTASYNC_SUCCESS)
146               {
147                       printf("Failed to set callback, return code %d\n", rc);
148                       exit(EXIT_FAILURE);
149               }
150
151               conn_opts.keepAliveInterval = 20;
152               conn_opts.cleansession = 1;
153               conn_opts.onSuccess = onConnect;
154               conn_opts.onFailure = onConnectFailure;
155               conn_opts.context = client;
156               if ((rc = MQTTAsync_connect(client, &conn_opts)) != MQTTASYNC_SUCCESS)
157               {
158                       printf("Failed to start connect, return code %d\n", rc);
159                       exit(EXIT_FAILURE);
160               }
161
162               printf("Waiting for publication of %s\n"
163                "on topic %s for client with ClientID: %s\n",
164                PAYLOAD, TOPIC, CLIENTID);
165               while (!finished)
166                       #if defined(_WIN32)
167                               Sleep(100);
168                       #else
169                               usleep(10000L);
170                       #endif
171
172               MQTTAsync_destroy(&client);
173               return rc;
174       }
175
176
177Paho Asynchronous MQTT C Client LTihburaJrayn 19 2023                     publish(3)
Impressum