+/* Copyright (c) 2007, 2010. The SimGrid Team.
+ * All rights reserved. */
+
+/* This program is free software; you can redistribute it and/or modify it
+ * under the terms of the license (GNU LGPL) which comes with this package. */
+
#include <stdlib.h>
#include <gras.h>
-XBT_LOG_NEW_DEFAULT_CATEGORY(test,"My little example");
+XBT_LOG_NEW_DEFAULT_CATEGORY(test, "My little example");
-void message_declaration(void) {
+void message_declaration(void)
+{
gras_msgtype_declare("request", NULL);
gras_msgtype_declare("grant", NULL);
gras_msgtype_declare("release", NULL);
}
typedef struct {
- int process_in_CS;
- xbt_dynar_t waiting_queue;
+ int process_in_CS;
+ xbt_dynar_t waiting_queue;
} server_data_t;
-int server_request_cb(gras_msg_cb_ctx_t ctx, void *payload) {
- server_data_t *globals=(server_data_t*)gras_userdata_get();
+int server_request_cb(gras_msg_cb_ctx_t ctx, void *payload)
+{
+ server_data_t *globals = (server_data_t *) gras_userdata_get();
gras_socket_t s = gras_msg_cb_ctx_from(ctx);
-
+
if (globals->process_in_CS) {
- xbt_dynar_push(globals->waiting_queue, &s);
- INFO2("put %s:%d in waiting queue",gras_socket_peer_name(s),gras_socket_peer_port(s));
- } else {
- globals->process_in_CS = 1;
- INFO2("grant %s:%d since nobody wanted it",gras_socket_peer_name(s),gras_socket_peer_port(s));
- gras_msg_send(s, gras_msgtype_by_name("grant"), NULL);
+ xbt_dynar_push(globals->waiting_queue, &s);
+ XBT_INFO("put %s:%d in waiting queue", gras_socket_peer_name(s),
+ gras_socket_peer_port(s));
+ } else {
+ globals->process_in_CS = 1;
+ XBT_INFO("grant %s:%d since nobody wanted it", gras_socket_peer_name(s),
+ gras_socket_peer_port(s));
+ gras_msg_send(s, "grant", NULL);
}
- return 1;
-} /* end_of_request_callback */
+ return 0;
+} /* end_of_request_callback */
+
+int server_release_cb(gras_msg_cb_ctx_t ctx, void *payload)
+{
+ server_data_t *globals = (server_data_t *) gras_userdata_get();
-int server_release_cb(gras_msg_cb_ctx_t ctx, void *payload) {
- server_data_t *globals=(server_data_t*)gras_userdata_get();
-
if (xbt_dynar_length(globals->waiting_queue)) {
- gras_socket_t s;
- xbt_dynar_pop(globals->waiting_queue, &s);
-
- INFO2("grant %s:%d since token released",gras_socket_peer_name(s),gras_socket_peer_port(s));
- gras_msg_send(s, gras_msgtype_by_name("grant"), NULL);
+ gras_socket_t s;
+ xbt_dynar_pop(globals->waiting_queue, &s);
+
+ XBT_INFO("grant %s:%d since token released", gras_socket_peer_name(s),
+ gras_socket_peer_port(s));
+ gras_msg_send(s, "grant", NULL);
} else {
- globals->process_in_CS = 0;
+ globals->process_in_CS = 0;
}
-
- return 1;
-} /* end_of_release_callback */
-int server(int argc, char *argv[]) {
- gras_socket_t mysock; /* socket on which I listen */
+ return 0;
+} /* end_of_release_callback */
+
+int server(int argc, char *argv[])
+{
+ gras_socket_t mysock; /* socket on which I listen */
server_data_t *globals;
int i;
-
- gras_init(&argc,argv);
+
+ gras_init(&argc, argv);
mysock = gras_socket_server(atoi(argv[1]));
- globals=gras_userdata_new(server_data_t);
- globals->process_in_CS=0;
- globals->waiting_queue=xbt_dynar_new( sizeof(gras_socket_t), NULL /* not closing sockets */);
+ globals = gras_userdata_new(server_data_t);
+ globals->process_in_CS = 0;
+ globals->waiting_queue =
+ xbt_dynar_new(sizeof(gras_socket_t),
+ NULL /* not closing sockets */ );
- message_declaration();
- gras_cb_register(gras_msgtype_by_name("request"),&server_request_cb);
- gras_cb_register(gras_msgtype_by_name("release"),&server_release_cb);
+ message_declaration();
+ gras_cb_register("request", &server_request_cb);
+ gras_cb_register("release", &server_release_cb);
+
+ for (i = 0; i < 20; i++) /* 5 requests of each process, 2 processes, 2 messages per request */
+ gras_msg_handle(-1);
- for (i=0; i<20; i++) /* 5 requests of each process, 2 processes, 2 messages per request */
- gras_msg_handle(-1);
-
gras_exit();
return 0;
-} /* end_of_server */
+} /* end_of_server */
-void lock(gras_socket_t toserver) {
- gras_msg_send(toserver,gras_msgtype_by_name("request"),NULL);
- gras_msg_wait(-1, gras_msgtype_by_name("grant"),NULL,NULL);
- INFO0("Granted by server");
-} /* end_of_lock */
+void lock(gras_socket_t toserver)
+{
+ gras_msg_send(toserver, "request", NULL);
+ gras_msg_wait(-1, "grant", NULL, NULL);
+ XBT_INFO("Granted by server");
+} /* end_of_lock */
-void unlock(gras_socket_t toserver) {
- INFO0("Release the token");
- gras_msg_send(toserver,gras_msgtype_by_name("release"),NULL);
-} /* end_of_unlock */
+void unlock(gras_socket_t toserver)
+{
+ XBT_INFO("Release the token");
+ gras_msg_send(toserver, "release", NULL);
+} /* end_of_unlock */
-int client(int argc, char *argv[]) {
+int client(int argc, char *argv[])
+{
int i;
- gras_socket_t mysock; /* socket on which I listen */
- gras_socket_t toserver; /* socket used to write to the server */
+ gras_socket_t mysock; /* socket on which I listen */
+ gras_socket_t toserver; /* socket used to write to the server */
- gras_init(&argc,argv);
+ gras_init(&argc, argv);
mysock = gras_socket_server_range(1024, 10000, 0, 0);
-
- VERB1("Client ready; listening on %d", gras_socket_my_port(mysock));
-
- gras_os_sleep(1.5); /* sleep 1 second and half */
+
+ XBT_VERB("Client ready; listening on %d", gras_socket_my_port(mysock));
+
+ gras_os_sleep(1.5); /* sleep 1 second and half */
message_declaration();
toserver = gras_socket_client(argv[1], atoi(argv[2]));
- for (i=0;i<5; i++) {
- gras_os_sleep(0.1);
- lock(toserver);
- gras_os_sleep(0.1);
- unlock(toserver);
+ for (i = 0; i < 5; i++) {
+ gras_os_sleep(0.1);
+ lock(toserver);
+ gras_os_sleep(0.1);
+ unlock(toserver);
}
gras_exit();
return 0;