- else if(!create)
- {
- //Sleep Before Starting
- INFO1("Let's Sleep >>%i",atoi(argv[6]));
- MSG_process_sleep(atoi(argv[5]));
- INFO0("Hey! Let's Send a Join Request");
- //send a join task to the known host via its(known host) mailbox
- const char* known_host_name = argv[3];
- const char* known_mailbox = argv[4];
- int known_id = atoi(argv[5]);
- m_task_t join_request = MSG_task_create("Join Call",10000,2000,data); // define comp size and comm size (#define ...)
- INFO2("Sending a join request to %s via mailbox %s",known_host_name,known_mailbox);
- MSG_task_send(join_request,known_mailbox);
- //wait for answer on my mailbox
- while(cpt < MSG_get_host_number()-1)
- {
- recv_request = NULL;
- int res = MSG_task_receive(&(recv_request),data->mailbox);
- //check if it's the response for my request
- xbt_assert0(res == MSG_OK, "MSG_receiev failed");
- // get data
- data_node *recv_data = (data_node*)MSG_task_get_data(recv_request);
- // Join Call Message
- if(!strcmp(MSG_task_get_name(recv_request), "Join Call"))
- {
-
- INFO1("Receiving Join Call From %s",recv_data->host_name);
- if(!joined)
- {
- INFO1("Sorry %s... I'm not yet joined",recv_data->host_name);
- //No Treatment
- MSG_task_set_name(recv_request,"Join Failed");
- MSG_task_send(recv_request,recv_data->mailbox);
- }
- else
- {
- find_successor_node(data,recv_request);
- }
-
- }
- // Join Response
- else if(!strcmp(MSG_task_get_name(recv_request), "Join Response"))
- {
- INFO0("Receiving Join Response!!!");
- INFO1("My successor is : %s",data->fingers[0].host_name);
- INFO1("My Predecessor is : %s",data->pred_host_name);
- cpt++;
- joined = 1;
- INFO1("My finger table size : %i",data->fingers_nb);
- INFO0("***********************************************************************");
-
- /*
- MSG_task_set_name(recv_request,"Fix Fingers");
-
- MSG_task_send(recv_request,data->pred_mailbox);
- MSG_task_send(recv_request,data->fingers[0].mailbox);
- */
- init_finger_table(data, known_id);
-
- //treatment
- }
- // Join Failure Message
- else if(!strcmp(MSG_task_get_name(recv_request), "Join Failed"))
- {
- INFO0("My Join call has failed... let's Try Again");
- // send back
- //MSG_task_send(join_request,known_mailbox);
- // !!!!!!!!! YVes Jaques Always...???ยงยงยงยง**************************
-
- }
- else if(!strcmp(MSG_task_get_name(recv_request), "Fix Fingers"))
- {
- int i;
- for(i = KEY_BITS -1 ; i>= 0;i--)
- {
- //data->fingers[i] = find_finger_elem(data,(data->id)+pow(2,i-1));
- }
- }
- }
- }
- return 0;