Exemplo n.º 1
0
// Update
void NDP::update(){
  // update loop
  while(running){
    // Removal list
    vector<string> removals;
    // Lock
    barrier.lock();
    // Update neighbor table
    for(auto &n: neighbors){
      // Arrived
      if(n.getArrived() == true){
        // New neighbor
        if(n.getAge() == -1){
          // Notify IARP
		barrier.unlock();
          instance->foundNeighbor(n.getAddress());
		barrier.lock();
        }
        n.setAge(0);
        n.setArrived(false);
      }
      // Not arrived
      else{
        // Neighbor lost
        if(n.getAge() >= maxAge){
          // Add to removal list          
          removals.push_back(n.getAddress());
        }
        // Neighbor not lost yet
        else{
          // Increment age
          n.setAge(n.getAge() + 1);
        }
      }    
    }
    // Remove entries
    for(auto &a: removals){
      // Remove neighbor
      removeNeighbor(a);
      // Notify IARP      
	barrier.unlock();
      instance->lostNeighbor(a);
	barrier.lock();
    }
    // Unlock
    barrier.unlock();
    // SLeep for random duration
    chrono::milliseconds dura(
    rand() % (updateMaxDelay - updateMinDelay) + updateMinDelay);
    this_thread::sleep_for(dura);
  }
}
Exemplo n.º 2
0
void Graph<T>::removeNeighbor( int nodeID, int neighborID ){
    removeNeighbor( nodes[nodeID].neighbors, neighborID );
}