Example #1
0
	typename TTunnels::value_type TunnelPool::GetNextTunnel (TTunnels& tunnels)
	{
		if (tunnels.empty ()) return nullptr;
		for (auto it: tunnels)
			if (!it->IsFailed ())
				return it;
		return nullptr;
	}
Example #2
0
	typename TTunnels::value_type TunnelPool::GetNextTunnel (TTunnels& tunnels, typename TTunnels::value_type excluded) const
	{
		if (tunnels.empty ()) return nullptr;		
		uint32_t ind = rand () % (tunnels.size ()/2 + 1), i = 0;
		typename TTunnels::value_type tunnel = nullptr;
		for (auto it: tunnels)
		{	
			if (it->IsEstablished () && it != excluded)
			{
				tunnel = it;
				i++;
			}
			if (i > ind && tunnel) break;
		}
		if (!tunnel && excluded && excluded->IsEstablished ()) tunnel = excluded;
		return tunnel;
	}