Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
adapt to lastest changes in GRAS API
[simgrid.git] / doc / gtut-files / 05-globals.c
1 #include <gras.h>
2
3 typedef struct {
4    int killed;
5 } server_data_t;
6    
7
8 int server_kill_cb(gras_msg_cb_ctx_t ctx, void *payload) {
9   gras_socket_t client = gras_msg_cb_ctx_from(ctx);
10   server_data_t *globals=(server_data_t*)gras_userdata_get();
11    
12   fprintf(stderr,"Argh, killed by %s:%d! Bye folks...\n",
13           gras_socket_peer_name(client), gras_socket_peer_port(client));
14   
15   globals->killed = 1;
16    
17   return 0;
18 } /* end_of_kill_callback */
19
20 int server_hello_cb(gras_msg_cb_ctx_t ctx, void *payload) {
21   gras_socket_t client = gras_msg_cb_ctx_from(ctx);
22
23   fprintf(stderr,"Cool, we received the message from %s:%d.\n",
24           gras_socket_peer_name(client), gras_socket_peer_port(client));
25   
26   return 0;
27 } /* end_of_hello_callback */
28
29 int server(int argc, char *argv[]) {
30   gras_socket_t mysock;   /* socket on which I listen */
31   server_data_t *globals;
32   
33   gras_init(&argc,argv);
34
35   globals=gras_userdata_new(server_data_t*);
36   globals->killed=0;
37
38   gras_msgtype_declare("hello", NULL);
39   gras_msgtype_declare("kill", NULL);
40   mysock = gras_socket_server(atoi(argv[1]));
41    
42   gras_cb_register("hello",&server_hello_cb);   
43   gras_cb_register("kill",&server_kill_cb);
44
45   while (!globals->killed) {
46      gras_msg_handle(-1); /* blocking */
47   }
48     
49   gras_exit();
50   return 0;
51 }
52
53 int client(int argc, char *argv[]) {
54   gras_socket_t mysock;   /* socket on which I listen */
55   gras_socket_t toserver; /* socket used to write to the server */
56
57   gras_init(&argc,argv);
58
59   gras_msgtype_declare("hello", NULL);
60   gras_msgtype_declare("kill", NULL);
61   mysock = gras_socket_server_range(1024, 10000, 0, 0);
62   
63   fprintf(stderr,"Client ready; listening on %d\n", gras_socket_my_port(mysock));
64   
65   gras_os_sleep(1.5); /* sleep 1 second and half */
66   toserver = gras_socket_client(argv[1], atoi(argv[2]));
67   
68   gras_msg_send(toserver,"hello", NULL);
69   fprintf(stderr,"we sent the data to the server on %s. Let's do it again for fun\n", gras_socket_peer_name(toserver));
70   gras_msg_send(toserver,"hello", NULL);
71    
72   fprintf(stderr,"Ok. Enough. Have a rest, and then kill the server\n");
73   gras_os_sleep(5); /* sleep 1 second and half */
74   gras_msg_send(toserver,"kill", NULL);
75
76   gras_exit();
77   return 0;
78 }