void coacsHelloTimer::expire(Event *e) { if(!a_->flag_is_QD && a_->clusterQD==0) a_->send_HELLO_Message(IP_BROADCAST); //a_->myHelloTimer.resched(TIMEOUT); a_->chTimer.resched(TIMEOUT); } void coacsCHTimer::expire(Event *e) { //Decide wether to be QD CH or not if(a_->numNodes == 0) return; a_->flag_is_QD = true; for (int i = 0; i < a_->numNodes; i++) if(a_->scores[i] > a_->OwnScore) { a_->flag_is_QD = false; break ; } if(a_->flag_is_QD) { a_->send_CH_Message(IP_BROADCAST); a_->clusterQD = a_->Myaddr(); a_->clusterQDScore = a_->OwnScore; printf("\n\t\t###At %d: %d CHTimer expired and it became CH ###", a_->now(), a_->Myaddr() ); fprintf(TraceFile,"\n\t\t###At %d: %d CHTimer expired and it became CH ###",a_->now(), a_->Myaddr() ); for (int i = 0; i < a_->numNodes; i++) fprintf(TraceFile," %d, ", a_->scores[i] ); fprintf(TraceFile," \n"); } } void coacsJoinTimer::expire(Event *e) { a_->send_JOIN_Message(a_->clusterQD); }