Show
Ignore:
Timestamp:
04/27/07 14:22:07 (2 years ago)
Author:
aronb
Message:

Change clustering to be single threaded. This uses a Reactor to do a select on
all sockets.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • juggler/branches/2.2/modules/gadgeteer/gadget/AbstractNetworkManager.cpp

    r19729 r20010  
    2727#include <gadget/gadgetConfig.h> 
    2828 
     29#include <algorithm> 
    2930#include <iomanip> 
    3031 
     
    245246   } 
    246247 
     248   struct HostnamePred 
     249   { 
     250      HostnamePred(const std::string& nodeHostname) 
     251         : mHostname(nodeHostname) 
     252      { 
     253         /* Do nothing. */ ; 
     254      } 
     255 
     256      bool operator()(gadget::Node* n) 
     257      { 
     258         return n->getHostname() == mHostname; 
     259      } 
     260 
     261      const std::string& mHostname; 
     262   }; 
     263 
    247264   void AbstractNetworkManager::removeNode(const std::string& nodeHostname) 
    248265   { 
     
    252269         << std::endl << vprDEBUG_FLUSH; 
    253270 
    254       for (std::vector<gadget::Node*>::iterator itr = mNodes.begin() ; itr != mNodes.end() ; itr++) 
    255       { 
    256          if ((*itr)->getHostname() == nodeHostname) 
    257          { 
    258             mNodes.erase(itr); 
    259             return; 
    260          } 
     271      typedef std::vector<gadget::Node*>::iterator iter_t; 
     272      HostnamePred pred(nodeHostname); 
     273      iter_t n = std::find_if(mNodes.begin(), mNodes.end(), pred); 
     274 
     275      if ( n != mNodes.end() ) 
     276      { 
     277         mReactor.removeNode(*n); 
     278         mNodes.erase(n); 
    261279      } 
    262280   } 
     
    476494         if ((*i)->getStatus() == Node::NEWCONNECTION) 
    477495         { 
    478             vprDEBUG( gadgetDBG_NET_MGR, vprDBG_STATE_LVL
     496            vprDEBUG( gadgetDBG_NET_MGR, 0
    479497               << clrOutBOLD( clrMAGENTA, "[AbstractNetworkManager]" ) 
    480498               << " Node: " << (*i)->getName() 
     
    483501 
    484502            new_connection = true; 
    485             (*i)->start(); 
    486503            (*i)->setStatus( Node::CONNECTED ); 
     504            mReactor.addNode(*i); 
    487505         } 
    488506      }