void CommunicationComManager::messageReceived(Message* message) { //Get Time frame to accept the messageReceived TIME currentTime=Integrator::getCurSimTime(); TIME graceTime=currentTime- Integrator::getPacketLostPeriod(); if(graceTime>currentTime){ //overflowed graceTime=0; } #if DEBUG if (message->getSize() > 0) { CERR << "AbsCommManager::messageReceived(" << (char*)message->getData() << ") " << currentTime << endl; } else { CERR << "AbsCommManager::messageReceived(NULL) " << currentTime << endl; } #endif if(message->getTime()<graceTime){ //old message drop #if DEBUG CERR << "message is old dropping" << endl; #endif delete message; return; } #if DEBUG CERR << message->getTo() << endl; #endif ObjectCommInterface *comm=getObjectInterface(message->getFrom()); //handle bcast if(message->isBroadCast()){ addMessageTimeout(message->getTime(),true); map<string,ObjectCommInterface*>::iterator it=this->interfaces.begin(); for(;it!=interfaces.end();++it){ if(it->first.compare(message->getFrom())==0) continue; Message *nm=new Message(message->getFrom(),it->first,message->getTime(), message->getData(),message->getSize()); signalNewMessage(comm,nm); //it->second->newMessage(nm); } delete message; } else{ //handle single message //let it throw an exception if the key is not found //comm->newMessage(message); signalNewMessage(comm,message); addMessageTimeout(message->getTime()); } }
/** * called when popupFileTimer is done, * looks for new messages and parses them */ void KLinPopup::popupFileTimerDone() { // maybe we can use inotify here some day if (checkPopupFileDirectory()) { QDir dir(POPUP_DIR); const QFileInfoList *popupFiles = dir.entryInfoList(QDir::Files, QDir::Name); if (popupFiles) { QFileInfoListIterator it(*popupFiles); QFileInfo *popupFileInfo; while((popupFileInfo = it.current()) != 0) { ++it; if (popupFileInfo -> isFile()) { QString popupFileName(popupFileInfo -> fileName()); QString popupFilePath(POPUP_DIR); popupFilePath.append("/"); popupFilePath.append(popupFileName); QFile popupFile(popupFilePath); kdDebug() << "popupFile " << popupFileName << endl; if (popupFile.open(IO_ReadOnly)) { QTextStream stream(&popupFile); QString line; QString sender; QString machine; QString ip; QString time; QString text; int i = 0; while (! stream.atEnd()) { i++; line = stream.readLine(); if (i == 1) { sender.append(line); continue; } if (i == 2) { machine.append(line); continue; } if (i == 3) { ip.append(line); continue; } if (i == 4) { time.append(line); continue; } if (i > 5) { text.append('\n'); } text.append(line); } popupFile.close(); // delete file if (! popupFile.remove()) kdDebug() << "Message file not removed - how that?" << endl; signalNewMessage(sender, machine, ip, time, text); } } } } if (!hasInotify) popupFileTimer->start(optTimerInterval * 1000, true); } }