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; }