uint8 Process_Event() { uint8 current_event; current_event = Pop_T(); switch(current_event) { case EVENT_BEACON_SEND: SendBeacon(); break; case EVENT_JOINREQUEST_HANDLER: JoinRequestHandler(); break; case EVENT_JOINREQUESTACKOK_HANDLER: JoinRequestACKOKHandler(); break; case EVENT_DATA_HANDLER: DataHandler(); break; case EVENT_UPLOAD_DATA: Upload_Data(); break; case EVENT_REJOIN_SEND: SendReJoin(); break; } return current_event; }
void *data_uploading_thread() { printf("\nData Uploading Thread is running"); //----------------READ DATA SERVER LIST FILE----------------// printf("\nRead data server list:"); int numberofnode; id_ip *data_server_list; data_server_list = read_setting_file(list_data_server,&numberofnode); if(data_server_list == NULL) { printf("\nCannot read database server list file"); exit(1); } //-------------------upload file to server----------------------// while(1) { if(is_shutdown == 1 ) break; pthread_mutex_lock(&condition_mutex_for_upload); while(is_queue_empty(uploading_queue)==1) { pthread_cond_wait(&condition_cond_for_upload, &condition_mutex_for_upload); } pthread_mutex_lock(&condition_mutex_for_upload); pthread_mutex_lock(&is_loading_mutex); is_uploading =1; pthread_mutex_unlock(&is_loading_mutex); node *n = create_node_default(); n=dequeue(&uploading_queue_mutex,uploading_queue); if( n == NULL) { printf("\nQueue is empty\n"); pthread_mutex_lock(&is_loading_mutex); is_uploading = 0; pthread_mutex_unlock(&is_loading_mutex); continue; } ticket *t = n->value; print_ticket(t); Upload_Data(data_server_list,t->server_id,itoa(server_id)); t->hop_count =1; printf("\nUpload finish, send ticket to neighbor\n"); print_ticket(t); //pass ticket to Ticket Forwarder enqueue(&forwarding_queue_mutex,forwarding_queue,n); pthread_cond_signal( &condition_cond_for_forward ); pthread_mutex_lock(&is_loading_mutex); is_uploading = 0; pthread_mutex_unlock(&is_loading_mutex); free(n); } }