int main(int argc, char **argv) { natsConnection *conn = NULL; natsOptions *opts = NULL; natsSubscription *sub = NULL; natsStatus s; opts = parseArgs(argc, argv, usage); printf("Listening asynchronously on '%s' with a timeout of %d ms.\n", subj, (int) timeout); s = natsConnection_Connect(&conn, opts); if (s == NATS_OK) { if (name != NULL) s = natsConnection_QueueSubscribeTimeout(&sub, conn, subj, name, timeout, onMsg, NULL); else s = natsConnection_SubscribeTimeout(&sub, conn, subj, timeout, onMsg, NULL); } // Check every half a second for end of test. while ((s == NATS_OK) && !done) { nats_Sleep(500); } if (s != NATS_OK) { printf("Error: %d - %s\n", s, natsStatus_GetText(s)); nats_PrintLastErrorStack(stderr); } // Destroy all our objects to avoid report of memory leak // Do not destroy subscription since it is done in the callback natsConnection_Destroy(conn); natsOptions_Destroy(opts); // To silence reports of memory still in used with valgrind nats_Close(); return 0; }
int main(int argc, char **argv) { natsConnection *conn = NULL; natsOptions *opts = NULL; natsSubscription *sub = NULL; natsStatistics *stats = NULL; natsMsg *msg = NULL; natsStatus s; opts = parseArgs(argc, argv, usage); printf("Listening %ssynchronously on '%s' with name '%s'.\n", (async ? "a" : ""), subj, name); s = natsOptions_SetErrorHandler(opts, asyncCb, NULL); if (s == NATS_OK) s = natsConnection_Connect(&conn, opts); if (s == NATS_OK) { if (async) s = natsConnection_QueueSubscribe(&sub, conn, subj, name, onMsg, NULL); else s = natsConnection_QueueSubscribeSync(&sub, conn, subj, name); } // For maximum performance, set no limit on the number of pending messages. if (s == NATS_OK) s = natsSubscription_SetPendingLimits(sub, -1, -1); if (s == NATS_OK) s = natsSubscription_AutoUnsubscribe(sub, (int) total); if (s == NATS_OK) s = natsStatistics_Create(&stats); if ((s == NATS_OK) && async) { while (s == NATS_OK) { s = printStats(STATS_IN|STATS_COUNT,conn, sub, stats); if (count == total) break; if (s == NATS_OK) nats_Sleep(1000); } } else if (s == NATS_OK) { int64_t last = 0; for (count = 0; (s == NATS_OK) && (count < total); count++) { s = natsSubscription_NextMsg(&msg, sub, 10000); if (s != NATS_OK) break; if (start == 0) start = nats_Now(); if (nats_Now() - last >= 1000) { s = printStats(STATS_IN|STATS_COUNT,conn, sub, stats); last = nats_Now(); } natsMsg_Destroy(msg); } } if (s == NATS_OK) { printPerf("Received", total, start, elapsed); } else { printf("Error: %d - %s\n", s, natsStatus_GetText(s)); nats_PrintLastErrorStack(stderr); } // Destroy all our objects to avoid report of memory leak natsStatistics_Destroy(stats); natsSubscription_Destroy(sub); natsConnection_Destroy(conn); natsOptions_Destroy(opts); // To silence reports of memory still in used with valgrind nats_Close(); return 0; }