int neUserManager::checkPingAndStatus(neUser *user) { int ret = 0; nemsgPing pingMsg((ncSocket *)0); nemsgStatus statusMsg((ncSocket *)0); static int pingTime = g_config.getUserPingDelay(); static int statusTime = g_config.getUserStatusDelay(); assert(user); assert(user->getSocket()); /* check if a ping message should be sent to the user */ if (user->isPingTime()) { pingMsg.setSocket(user->getSocket()); user->lockWriteLock(); if (pingMsg.send()) { iprintf("Removing User %x (ping send failed).\n",user); ret = 1; } else { user->setPingTime(pingTime); /* check if a status message should be sent to the user */ if (user->isStatusTime()) { statusMsg.setSocket(user->getSocket()); if (statusMsg.send (m_serverStatus->getNumUsers(), m_serverStatus->getNumUserFiles(), m_serverStatus->getTotalSizeofFilesInMB())) { iprintf("Removing User %x (status send failed).\n",user); ret = 1; } else { user->setStatusTime(statusTime); } } } user->unlockWriteLock(); } return ret; }
void Membership::listeningThread() { //char buffer[BUFFER_MAX]; struct Message msg; std::string sender; srand (time(NULL)); logFile<< std::endl <<"listeningThread: thread begins"<<std::endl; while (!killListeningThread) { if (members.empty()) { //In case the node decided to leave continue; } int byte_count = receiveUDP(sockfd, (char*)&msg, sizeof(msg), sender); logFile << "listeningThread: Receive message from: " << sender.c_str() << " "; logFile << "type: " << msg.type << "ttl: " << (int)msg.TTL << std::endl; if (byte_count != sizeof(msg)) { logFile << "ERROR listeningThread: size receiving incorrect: Message dropped" << std::endl; continue; } switch (msg.type) { case MSG_PING: pingMsg(msg, sender); break; case MSG_ACK: ackMsg(msg, sender); break; case MSG_PIGGY: piggyMsg(msg, sender); break; case MSG_PIGGY_PING: piggyPingMsg(msg, sender); break; case MSG_PIGGY_ACK: piggyAckMsg(msg, sender); break; case MSG_FAIL: failMsg(msg, sender); break; case MSG_JOIN: joinMsg(msg, sender); break; case MSG_LEAVE: leaveMsg(msg, sender); break; case MSG_ELECTION: electionMsg(msg, sender); break; case MSG_BULLY: bullyMsg(msg, sender); break; case MSG_NEWLEADER: newLeaderMsg(msg, sender); break; default: logFile<<"ERROR: listeningThread: received msg does not belong to a type"<<std::endl; } } }