3 XBT_LOG_NEW_DEFAULT_CATEGORY(test,"My little example");
10 int server_kill_cb(gras_msg_cb_ctx_t ctx, void *payload) {
11 gras_socket_t client = gras_msg_cb_ctx_from(ctx);
12 server_data_t *globals=(server_data_t*)gras_userdata_get();
14 CRITICAL2("Argh, killed by %s:%d! Bye folks, I'm out of here...",
15 gras_socket_peer_name(client), gras_socket_peer_port(client));
20 } /* end_of_kill_callback */
22 int server(int argc, char *argv[]) {
23 gras_socket_t mysock; /* socket on which I listen */
24 server_data_t *globals;
26 gras_init(&argc,argv);
28 globals=gras_userdata_new(server_data_t*);
31 gras_msgtype_declare("kill", NULL);
32 gras_cb_register("kill",&server_kill_cb);
34 if (argc>1 && !strcmp(argv[1],"--cheat")) {
35 mysock = gras_socket_server(9999);
36 INFO0("Hi! hi! I'm not in the search range, but in 9999...");
38 mysock = gras_socket_server((rand() % 10) + 3000);
39 INFO1("Ok, I'm hidden on port %d. Hope for the best.", gras_socket_my_port(mysock));
42 while (!globals->killed) {
43 gras_msg_handle(-1); /* blocking */
50 int client(int argc, char *argv[]) {
51 gras_socket_t mysock; /* socket on which I listen */
52 gras_socket_t toserver; /* socket used to write to the server */
53 int found; /* whether we found peer */
54 int port; /* where we think that the server is */
57 gras_init(&argc,argv);
59 gras_msgtype_declare("kill", NULL);
60 mysock = gras_socket_server_range(1024, 10000, 0, 0);
62 VERB0("Run little server, run. I'll get you. (sleep 1.5 sec)");
65 for (port=3000, found=0; port<3010 && !found; port++) {
67 toserver = gras_socket_client(argv[1], port);
68 gras_msg_send(toserver,"kill", NULL);
69 gras_socket_close(toserver);
71 INFO1("Yeah! I found the server on %d! It's eradicated by now.",port);
76 INFO1("Damn, the server is not on %d",port);
80 THROW0(not_found_error, 0, "Damn, I failed to find the server! I cannot survive this humilliation.");