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());
      }
    
     
    }
Beispiel #2
0
InterfaceProxy *DataManager::getObjectInterface(std::string const &path) const {
	return getObjectInterface(hash_string(path.c_str()), path, 0);
}
Beispiel #3
0
InterfaceProxy *DataManager::getObjectInterface(ObjectID const &id) const {
	return getObjectInterface(id, "", 0);
}