Send a fixed number of messages to the "example" node.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
typedef char str[1024];
typedef struct app_data_t {
str address;
str container_id;
int message_count;
int sent;
int acknowledged;
bool delaying;
bool finished;
} app_data_t;
int exit_code = 0;
exit_code = 1;
}
}
static pn_bytes_t encode_message(app_data_t* app) {
if (app->message_buffer.start == NULL) {
static const size_t initial_size = 128;
app->message_buffer =
pn_rwbytes(initial_size, (
char*)malloc(initial_size));
}
int status = 0;
app->message_buffer.size *= 2;
app->message_buffer.start = (char*)realloc(app->message_buffer.start, app->message_buffer.size);
mbuf.size = app->message_buffer.size;
}
if (status != 0) {
exit(1);
}
}
static void send(app_data_t* app) {
while (
pn_link_credit(app->sender) > 0 && app->sent < app->message_count) {
++app->sent;
if (app->delay && app->sent < app->message_count) {
app->delaying = true;
break;
}
}
}
static void handle(app_data_t* app,
pn_event_t* event) {
} break;
if (!app->delaying) {
send(app);
}
break;
break;
app->delaying = false;
send(app);
break;
if (++app->acknowledged == app->message_count) {
printf("%d messages sent and acknowledged\n", app->acknowledged);
}
}
} break;
break;
break;
break;
break;
app->finished = true;
break;
default: break;
}
}
static void usage(const char *arg0) {
fprintf(stderr, "Usage: %s [-a url] [-m message-count] [-d delay-ms]\n", arg0);
exit(1);
}
int main(int argc, char **argv) {
app_data_t app = {{0}};
app.message_count = 100;
const char* urlstr = NULL;
int opt;
while((opt = getopt(argc, argv, "a:m:d:")) != -1) {
switch(opt) {
case 'a': urlstr = optarg; break;
case 'm': app.message_count = atoi(optarg); break;
case 'd': app.delay = atoi(optarg); break;
default: usage(argv[0]); break;
}
}
if (optind < argc)
usage(argv[0]);
snprintf(app.container_id, sizeof(app.container_id), "%s:%d", argv[0], getpid());
const char *host = url ? pn_url_get_host(url) : NULL;
const char *port = url ? pn_url_get_port(url) : "amqp";
strncpy(app.address, (url && pn_url_get_path(url)) ? pn_url_get_path(url) : "example", sizeof(app.address));
do {
handle(&app, e);
}
} while(!app.finished);
free(app.message_buffer.start);
return exit_code;
}