| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 | 
							- <?php
 
- class LtCacheConnectionManager
 
- {
 
- 	public $configHandle;
 
- 	protected $connectionAdapter;
 
- 	public function getConnection($group, $node, $role)
 
- 	{
 
- 		if ($connection = $this->getNewConnection($group, $node, $role))
 
- 		{
 
- 			return array(
 
- 				"connectionAdapter" => $this->connectionAdapter,
 
- 				"connectionResource" => $connection
 
- 			);
 
- 		}
 
- 		else
 
- 		{
 
- 			trigger_error("no cache server can be connected");
 
- 			return false;
 
- 		}
 
- 	}
 
- 	protected function getNewConnection($group, $node, $role)
 
- 	{
 
- 		$servers = $this->configHandle->get("cache.servers");
 
- 		$hostTotal = count($servers[$group][$node][$role]);
 
- 		$hostIndexArray = array_keys($servers[$group][$node][$role]);
 
- 		while ($hostTotal)
 
- 		{
 
- 			$hashNumber = substr(microtime(),7,1) % $hostTotal;
 
- 			$hostConfig = $servers[$group][$node][$role][$hostIndexArray[$hashNumber]];
 
- 			$cacheFactory = new LtCacheAdapterFactory;
 
- 			$this->connectionAdapter = $cacheFactory->getConnectionAdapter($hostConfig["adapter"]);
 
- 			if ($connection = $this->connectionAdapter->connect($hostConfig))
 
- 			{
 
- 				return $connection;
 
- 			}
 
- 			else
 
- 			{
 
- 				//trigger_error('connection fail', E_USER_WARNING);
 
- 				//delete the unavailable server
 
- 				for ($i = $hashNumber; $i < $hostTotal - 1; $i ++)
 
- 				{
 
- 					$hostIndexArray[$i] = $hostIndexArray[$i+1];
 
- 				}
 
- 				unset($hostIndexArray[$hostTotal-1]);
 
- 				$hostTotal --;
 
- 			}//end else
 
- 		}//end while
 
- 		return false;
 
- 	}
 
- }
 
 
  |