Exemple #1
0
CServerS* CMasterGameServer::GetLeastUsedServer(EGBGameRegion region)
{
  CServerS* selected = NULL;
  int       maxDiff = -1;
  
  // search for server with maximum available users
  for(TSupersList::iterator it = supers_.begin(); it != supers_.end(); ++it) 
  {
    CServerS* super = it->second;
    
    // filter our supervisors if region is specified
    if(region != GBNET_REGION_Unknown && super->region_ != region)
      continue;
    
    int diff = super->maxPlayers_ - super->GetExpectedPlayers();
    // diff can be negative here, because of unexpected joiners
    if(diff > 0 && diff > maxDiff) {
      maxDiff  = diff;
      selected = super;
    }
  }
  
  return selected;
}