void MQTTConnector::sendIdentityMessage() { IBMRAS_DEBUG_1(debug, "sending identity message: %s", agentIdMessage.c_str()); char topic[] = CLIENT_IDENTITY_TOPIC; char* idMessage = new char[agentIdMessage.length() + 1]; strcpy(idMessage, agentIdMessage.c_str()); MQTTAsync_send(mqttClient, topic, strlen(idMessage), idMessage, 1, 0, NULL); delete[] idMessage; }
void test1_onSubscribe(void* context, MQTTAsync_successData* response) { MQTTAsync c = (MQTTAsync)context; MQTTAsync_message pubmsg = MQTTAsync_message_initializer; int rc; MyLog(LOGA_DEBUG, "In subscribe onSuccess callback %p granted qos %d", c, response->alt.qos); pubmsg.payload = "a much longer message that we can shorten to the extent that we need to payload up to 11"; pubmsg.payloadlen = 11; pubmsg.qos = 2; pubmsg.retained = 0; rc = MQTTAsync_send(c, test_topic, pubmsg.payloadlen, pubmsg.payload, pubmsg.qos, pubmsg.retained, NULL); }
void test3_onSubscribe(void* context, MQTTAsync_successData* response) { client_data* cd = (client_data*)context; MQTTAsync_message pubmsg = MQTTAsync_message_initializer; int rc; MyLog(LOGA_DEBUG, "In subscribe onSuccess callback \"%s\"", cd->clientid); pubmsg.payload = "a much longer message that we can shorten to the extent that we need to payload up to 11"; pubmsg.payloadlen = 11; pubmsg.qos = 2; pubmsg.retained = 0; rc = MQTTAsync_send(cd->c, cd->test_topic, pubmsg.payloadlen, pubmsg.payload, pubmsg.qos, pubmsg.retained, NULL); assert("Good rc from publish", rc == MQTTASYNC_SUCCESS, "rc was %d", rc); }
int MQTTConnector::stop() { IBMRAS_DEBUG(debug, "stop"); if (mqttClient != NULL) { if (MQTTAsync_isConnected(mqttClient)) { // Send will message before our clean termination char* message = new char[willMessage.length() + 1]; strcpy(message, willMessage.c_str()); MQTTAsync_send(mqttClient, willTopic.c_str(), strlen(message), message, 1, 0, NULL); delete[] message; return MQTTAsync_disconnect(mqttClient, NULL); } } return -1; }
void test4_onSubscribe(void* context, MQTTAsync_successData* response) { MQTTAsync c = (MQTTAsync)context; MQTTAsync_message pubmsg = MQTTAsync_message_initializer; int rc, i; MyLog(LOGA_DEBUG, "In subscribe onSuccess callback %p", c); pubmsg.payload = test4_payload = malloc(options.size); pubmsg.payloadlen = test4_payloadlen = options.size; srand(33); for (i = 0; i < options.size; ++i) ((char*)pubmsg.payload)[i] = rand() % 256; pubmsg.qos = 2; pubmsg.retained = 0; rc = MQTTAsync_send(c, test_topic, pubmsg.payloadlen, pubmsg.payload, pubmsg.qos, pubmsg.retained, NULL); }
int MQTTConnector::sendMessage(const std::string &sourceId, uint32 size, void *data) { if (!enabled) { return 0; } if (mqttClient == NULL) { return -1; } if (!MQTTAsync_isConnected(mqttClient)) { if (sourceId == "heartbeat") { connect(); return 0; } else { return -1; } } IBMRAS_DEBUG_3(fine, "Sending message : topic %s : data %p : length %d", sourceId.c_str(), data, size); /* topic = <clientId>/sourceId */ char *topic = new char[rootTopic.length() + 1 + sourceId.length() + 1]; #if defined(_ZOS) #pragma convert("ISO8859-1") #endif sprintf(topic, "%s/%s", rootTopic.c_str(), sourceId.c_str()); #if defined(_ZOS) #pragma convert(pop) #endif // MQTTAsync_deliveryToken token; MQTTAsync_send(mqttClient, topic, size, data, 1, 0, NULL); delete[] topic; return size; }
int main(int argc, char** argv) { MQTTAsync_disconnectOptions disc_opts = MQTTAsync_disconnectOptions_initializer; MQTTAsync_responseOptions pub_opts = MQTTAsync_responseOptions_initializer; MQTTAsync_createOptions create_opts = MQTTAsync_createOptions_initializer; MQTTAsync client; char* topic = NULL; char* buffer = NULL; int rc = 0; char url[100]; if (argc < 2) usage(); getopts(argc, argv); sprintf(url, "%s:%s", opts.host, opts.port); if (opts.verbose) printf("URL is %s\n", url); topic = argv[1]; printf("Using topic %s\n", topic); create_opts.sendWhileDisconnected = 1; rc = MQTTAsync_createWithOptions(&client, url, opts.clientid, MQTTCLIENT_PERSISTENCE_NONE, NULL, &create_opts); signal(SIGINT, cfinish); signal(SIGTERM, cfinish); rc = MQTTAsync_setCallbacks(client, client, connectionLost, messageArrived, NULL); myconnect(&client); buffer = malloc(opts.maxdatalen); while (!toStop) { int data_len = 0; int delim_len = 0; delim_len = (int)strlen(opts.delimiter); do { buffer[data_len++] = getchar(); if (data_len > delim_len) { /* printf("comparing %s %s\n", opts.delimiter, &buffer[data_len - delim_len]); */ if (strncmp(opts.delimiter, &buffer[data_len - delim_len], delim_len) == 0) break; } } while (data_len < opts.maxdatalen); if (opts.verbose) printf("Publishing data of length %d\n", data_len); pub_opts.onSuccess = onPublish; pub_opts.onFailure = onPublishFailure; do { rc = MQTTAsync_send(client, topic, data_len, buffer, opts.qos, opts.retained, &pub_opts); } while (rc != MQTTASYNC_SUCCESS); } printf("Stopping\n"); free(buffer); disc_opts.onSuccess = onDisconnect; if ((rc = MQTTAsync_disconnect(client, &disc_opts)) != MQTTASYNC_SUCCESS) { printf("Failed to start disconnect, return code %d\n", rc); exit(EXIT_FAILURE); } while (!disconnected) #if defined(WIN32) Sleep(100); #else usleep(10000L); #endif MQTTAsync_destroy(&client); return EXIT_SUCCESS; }