8f315caf51eb7bca980aafe56cb3d8b1b01fef2e
[sahlberg/ctdb.git] / libctdb / tst.c
1 #include <stdio.h>
2 #include <stdint.h>
3 #include <poll.h>
4 #include <fcntl.h>
5 #include "lib/tdb/include/tdb.h"
6 #include "include/ctdb.h"
7
8 void msg_h(struct ctdb_context *ctdb, uint64_t srvid, TDB_DATA data, void *private_data)
9 {
10         printf("Message received on port %d : %s\n", (int)srvid, data.dptr);
11 }
12
13
14 void rm_cb(int32_t status, int32_t recmaster, void *private_data)
15 {
16         printf("recmaster:%d\n", recmaster);
17 }
18
19 int main(int argc, char *argv[])
20 {
21         struct ctdb_context *ctdb_context;
22         ctdb_handle *handle;
23         struct pollfd pfd;
24         int ret;
25         TDB_DATA msg;
26
27         ctdb_context = ctdb_connect("/tmp/ctdb.socket");
28
29
30         pfd.fd = ctdb_get_fd(ctdb_context);
31
32         handle = ctdb_set_message_handler_send(ctdb_context, 55, NULL, msg_h, NULL);
33         if (handle == NULL) {
34                 printf("Failed to register message port\n");
35                 exit(10);
36         }
37         ret = ctdb_set_message_handler_recv(ctdb_context, ctdb_handle);
38         if (ret != 0) {
39                 printf("Failed to receive set_message_handler reply\n");
40                 exit(10);
41         }
42
43         msg.dptr="HelloWorld";
44         msg.dsize = strlen(msg.dptr);
45
46         ret = ctdb_send_message(ctdb_context, 0, 55, msg);
47         if (ret != 0) {
48                 printf("Failed to send message. Aborting\n");
49                 exit(10);
50         }
51
52         handle = ctdb_getrecmaster_send(ctdb_context, 0, rm_cb, NULL);
53         if (handle == NULL) {
54                 printf("Failed to send get_recmaster control\n");
55                 exit(10);
56         }
57
58
59         for (;;) {
60
61           pfd.events = ctdb_which_events(ctdb_context);
62           if (poll(&pfd, 1, -1) < 0) {
63             printf("Poll failed");
64             exit(10);
65           }
66           ctdb_service(ctdb_context);
67         }
68
69         return 0;
70 }