<?php
/**
 * @copyright NetMonsters <team@netmonsters.ru>
 * @link http://netmonsters.ru
 * @package Majestic
 * @subpackage Redis
 * @since 2010-07-17
 * @version SVN: $Id$
 * @filesource $URL$
 */

class RedisManager
{
    
    /**
     * Redis connections
     * 
     * @var array
     */
    static protected $connections = array();
    
    /**
     * Connect to redis
     * 
     * @param string $name connection name. If not set 'default' will be used.
     * @param array $config Configuration array.
     *                       
     * @return Redis
     */
    static public function connect($name = 'default', $config = null)
    {
        if (!isset(self::$connections[$name])) {
            if (!$config) {
                $config = Config::get('Redis')->$name;
            }
                
            if (!is_array($config)) {
                throw new Exception('Connection parameters must be an array');
            }
            
            $host = isset($config['host']) ? $config['host'] : 'localhost';
            $port = isset($config['port']) ? $config['port'] : 6379;
            $database = isset($config['database']) ? $config['database'] : 0;
            
            /**
             * @var Redis
             */
            $connection = new Redis();
            if (!$connection->connect($host, $port)) {
                throw new Exception('Failed to connect to Redis server at ' . $host . ':' . $port);
            }
            if ($database) {
                if (!$connection->select($database)) {
                    throw new Exception('Failed to select Redis database with index ' . $database);
                }
            }
            self::$connections[$name] = $connection;
        }
        return self::$connections[$name];
    }
}