#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <event2/event.h>
const char key[] = "foo";
lcb_SIZE nkey = sizeof(key);
const char val[] = "{\"answer\":42}";
lcb_SIZE nval = sizeof(val);
int nreq = 1;
int nresp = 1;
int interval = 0;
struct event *timer = NULL;
{
lcb_CMDSTORE *cmd;
if (err != LCB_SUCCESS) {
exit(EXIT_FAILURE);
}
printf("successfully bootstrapped\n");
fflush(stdout);
lcb_cmdstore_key(cmd, key, nkey);
lcb_cmdstore_value(cmd, val, nval);
err = lcb_store(instance, NULL, cmd);
lcb_cmdstore_destroy(cmd);
if (err != LCB_SUCCESS) {
exit(EXIT_FAILURE);
}
}
{
const char *value;
size_t nvalue;
if (rc != LCB_SUCCESS) {
exit(EXIT_FAILURE);
}
lcb_respget_value(rg, &value, &nvalue);
printf("%d. retrieved the key 'foo', value: %.*s\n", nresp, (int)nvalue, value);
fflush(stdout);
nresp--;
if (nresp == 0) {
printf("stopping the loop\n");
}
(void)cbtype;
}
static void schedule_timer();
static void timer_callback(int fd, short event, void *arg)
{
lcb_CMDGET *gcmd;
lcb_cmdget_create(&gcmd);
lcb_cmdget_key(gcmd, key, nkey);
rc = lcb_get(instance, NULL, gcmd);
lcb_cmdget_destroy(gcmd);
if (rc != LCB_SUCCESS) {
exit(EXIT_FAILURE);
}
(void)fd;
(void)event;
schedule_timer();
}
static void schedule_timer()
{
struct timeval tv;
if (!nreq) {
return;
}
tv.tv_sec = interval;
tv.tv_usec = 0;
evtimer_add(timer, &tv);
nreq--;
}
{
if (rc != LCB_SUCCESS) {
exit(EXIT_FAILURE);
}
printf("stored key 'foo'\n");
fflush(stdout);
{
struct event_base *evbase = (
struct event_base *)
lcb_get_cookie(instance);
printf("try to get value %d times with %dsec interval\n", nreq, interval);
timer = evtimer_new(evbase, timer_callback, instance);
schedule_timer();
}
(void)cbtype;
}
static lcb_io_opt_t create_libevent_io_ops(struct event_base *evbase)
{
lcb_io_opt_t ioops;
memset(&ciops, 0, sizeof(ciops));
ciops.v.v0.cookie = evbase;
if (error != LCB_SUCCESS) {
fprintf(stderr,
"Failed to create an IOOPS structure for libevent: %s\n",
lcb_strerror_short(error));
exit(EXIT_FAILURE);
}
return ioops;
}
static lcb_INSTANCE *create_libcouchbase_handle(lcb_io_opt_t ioops,
int argc,
char **argv)
{
lcb_CREATEOPTS *options = NULL;
if (argc > 1) {
lcb_createopts_connstr(options, argv[1], strlen(argv[1]));
}
if (argc > 3) {
lcb_createopts_credentials(options, argv[3], strlen(argv[3]), argv[2], strlen(argv[2]));
}
lcb_createopts_io(options, ioops);
lcb_createopts_destroy(options);
if (error != LCB_SUCCESS) {
fprintf(stderr,
"Failed to create a libcouchbase instance: %s\n",
lcb_strerror_short(error));
exit(EXIT_FAILURE);
}
fprintf(stderr,
"Failed to connect libcouchbase instance: %s\n",
lcb_strerror_short(error));
exit(EXIT_FAILURE);
}
return instance;
}
int main(int argc, char **argv)
{
struct event_base *evbase = event_base_new();
lcb_io_opt_t ioops = create_libevent_io_ops(evbase);
lcb_INSTANCE *instance = create_libcouchbase_handle(ioops, argc, argv);
if (argc > 4) {
nreq = nresp = atoi(argv[4]);
}
if (argc > 5) {
interval = atoi(argv[5]);
}
event_base_loop(evbase, 0);
if (timer) {
evtimer_del(timer);
}
event_base_free(evbase);
return EXIT_SUCCESS;
}