-//////////////////////////////////////////////////////
+/*////////////////////////////////////////////////////*/
// Peer-To-Peer CAN simulator 050406 by Dytto ESIAL //
//////////////////////////////////////////////////////
#include "xbt/sysdep.h"
#include "gras.h"
-#include "can_tests.c" // test class & header containing the typedef struct of a node // include type.h must be OFF.
+#include "can_tests.c"
//#include "types.h" // header alone containing the typedef struct of a node // include can_tests.c must be OFF.
//XBT_LOG_NEW_DEFAULT_CATEGORY(can,"Messages specific to this example"); // include can_tests.c must be OFF.
+//extern char *_gras_this_type_symbol_does_not_exist__s_nuke;
+int node_nuke_handler(gras_msg_cb_ctx_t ctx,void *payload_data);
// struct of a "get_successor" message, when a node look after the area in which he want to be.
GRAS_DEFINE_TYPE(s_get_suc,
);
typedef struct s_rep_suc rep_suc_t;
+int node(int argc,char **argv);
+
// registering messages types
static void register_messages(){
gras_msgtype_declare("can_get_suc",gras_datadesc_by_symbol(s_get_suc));
// a forwarding function for a "get_suc" message.
static void forward_get_suc(get_suc_t msg, char host[1024], int port){
- gras_socket_t temp_sock;
+ gras_socket_t temp_sock=NULL;
xbt_ex_t e; // the error variable used in TRY.. CATCH tokens.
//INFO2("Transmiting message to %s:%d",host,port);
TRY{
}
// the handling function of a "get_suc" message (what do a node when he receive a "get_suc" message.
-static void node_get_suc_handler(gras_socket_t expeditor,void *payload_data){
- get_suc_t *incoming=(get_suc_t*)payload_data;
+static int node_get_suc_handler(gras_msg_cb_ctx_t ctx,void *payload_data){
+ gras_socket_t expeditor=gras_msg_cb_ctx_from(ctx);
+ get_suc_t *incoming=(get_suc_t*)payload_data;
xbt_ex_t e; // the error variable used in TRY.. CATCH tokens.
node_data_t *globals=(node_data_t*)gras_userdata_get();
}
if(validate==1){ // the area for the new node has been defined, then send theses informations to the new node.
INFO2("Sending environment informations to node %s:%d",incoming->host,incoming->port);
- gras_socket_t temp_sock;
+ gras_socket_t temp_sock=NULL;
TRY{
temp_sock=gras_socket_client(incoming->host,incoming->port);
}CATCH(e){
INFO4("My area is [%d;%d;%d;%d]",globals->x1,globals->x2,globals->y1,globals->y2);
//INFO0("Closing node, all has been done!");
}
+ return 1;
}
globals->y2=1000;
}else{ // asking for an area.
INFO1("Contacting %s so as to request for an area",argv[4]);
- gras_socket_t temp_sock;
+ gras_socket_t temp_sock=NULL;
TRY{
temp_sock=gras_socket_client(argv[4],atoi(argv[5]));
}CATCH(e){
// Peer-To-Peer CAN simulator 050406 by Dytto ESIAL //
//////////////////////////////////////////////////////
+#include <time.h>
+//#include "gras.h"
#include "types.h" // header containing the typedef struct of a node
XBT_LOG_NEW_DEFAULT_CATEGORY(can,"Messages specific to this example");
typedef struct s_nuke nuke_t;
// the function that start the **** War of the Nodes ****
+int start_war(int argc,char **argv);
int start_war(int argc,char **argv){
//return 0; // in order to inhibit the War of the Nodes
gras_init(&argc,argv);
gras_os_sleep((15-gras_os_getpid())*20+200); // wait a bit.
- gras_socket_t temp_sock;
+ gras_socket_t temp_sock=NULL;
xbt_ex_t e; // the error variable used in TRY.. CATCH tokens.
TRY{ // contacting the bad guy that will launch the War.
}
gras_socket_close(temp_sock); // spare.
gras_exit(); // spare.
+ return 0;
}
// the function thaht send the nuke "msg" on (xId;yId), if it's not on me :p.
}
else{
char host[1024];
- int port;
+ int port=0;
if(xId<globals->x1){
strcpy(host,globals->west_host);
msg->xId=xId;
msg->yId=yId;
- gras_socket_t temp_sock;
+ gras_socket_t temp_sock=NULL;
xbt_ex_t e; // the error variable used in TRY.. CATCH tokens.
TRY{ // sending the nuke.
temp_sock=gras_socket_client(host,port);
}
-static int node_nuke_handler(gras_socket_t expeditor,void *payload_data){
+static int node_nuke_handler(gras_msg_cb_ctx_t ctx,void *payload_data){
+ gras_socket_t expeditor=gras_msg_cb_ctx_from(ctx);
nuke_t *incoming=(nuke_t*)payload_data;
node_data_t *globals=(node_data_t*)gras_userdata_get();
}
else{ // the nuke isn't for me, so i forward her.
char host[1024];
- int port;
+ int port=0;
if(incoming->xId<globals->x1){
strcpy(host,globals->west_host);
strcpy(host,globals->north_host);
port=globals->north_port;}
- gras_socket_t temp_sock;
+ gras_socket_t temp_sock=NULL;
xbt_ex_t e; // the error variable used in TRY.. CATCH tokens.
TRY{
temp_sock=gras_socket_client(host,port);
INFO4("My area is [%d;%d;%d;%d]",globals->x1,globals->x2,globals->y1,globals->y2);
//INFO0("Closing node, all has been done!");
}
+ return 1;
}
// END