forked from GNUsocial/gnu-social
		
	
		
			
	
	
		
			131 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			131 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Phergie 
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * PHP version 5
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * LICENSE
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * This source file is subject to the new BSD license that is bundled
							 | 
						||
| 
								 | 
							
								 * with this package in the file LICENSE.
							 | 
						||
| 
								 | 
							
								 * It is also available through the world-wide-web at this URL:
							 | 
						||
| 
								 | 
							
								 * http://phergie.org/license
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @category  Phergie 
							 | 
						||
| 
								 | 
							
								 * @package   Phergie
							 | 
						||
| 
								 | 
							
								 * @author    Phergie Development Team <team@phergie.org>
							 | 
						||
| 
								 | 
							
								 * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
							 | 
						||
| 
								 | 
							
								 * @license   http://phergie.org/license New BSD License
							 | 
						||
| 
								 | 
							
								 * @link      http://pear.phergie.org/package/Phergie
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Handles connections initiated by the bot.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @category Phergie 
							 | 
						||
| 
								 | 
							
								 * @package  Phergie
							 | 
						||
| 
								 | 
							
								 * @author   Phergie Development Team <team@phergie.org>
							 | 
						||
| 
								 | 
							
								 * @license  http://phergie.org/license New BSD License
							 | 
						||
| 
								 | 
							
								 * @link     http://pear.phergie.org/package/Phergie
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								class Phergie_Connection_Handler implements Countable, IteratorAggregate
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Map of connections indexed by hostmask
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @var array
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    protected $connections;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Constructor to initialize storage for connections. 
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return void
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function __construct()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $this->connections = array();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Adds a connection to the connection list.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param Phergie_Connection $connection Connection to add
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return Phergie_Connection_Handler Provides a fluent interface
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function addConnection(Phergie_Connection $connection)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $this->connections[(string) $connection->getHostmask()] = $connection;
							 | 
						||
| 
								 | 
							
								        return $this;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Removes a connection from the connection list.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param Phergie_Connection|string $connection Instance or hostmask for
							 | 
						||
| 
								 | 
							
								     *        the connection to remove
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return Phergie_Connection_Handler Provides a fluent interface
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function removeConnection($connection)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        if ($connection instanceof Phergie_Connection) {
							 | 
						||
| 
								 | 
							
								            $hostmask = (string) $connection->getHostmask(); 
							 | 
						||
| 
								 | 
							
								        } elseif (is_string($connection) 
							 | 
						||
| 
								 | 
							
								            && isset($this->connections[$connection])) {
							 | 
						||
| 
								 | 
							
								            $hostmask = $connection;
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            return $this;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        unset($this->connections[$hostmask]);
							 | 
						||
| 
								 | 
							
								        return $this;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Returns the number of connections in the list. 
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return int Number of connections 
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function count()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return count($this->connections);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Returns an iterator for the connection list. 
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return ArrayIterator
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function getIterator()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return new ArrayIterator($this->connections);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Returns a list of specified connection objects.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param array|string $keys One or more hostmasks identifying the 
							 | 
						||
| 
								 | 
							
								     *        connections to return
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return array List of Phergie_Connection objects corresponding to the 
							 | 
						||
| 
								 | 
							
								     *         specified hostmask(s)
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function getConnections($keys)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $connections = array();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (!is_array($keys)) {
							 | 
						||
| 
								 | 
							
								            $keys = array($keys);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								        foreach ($keys as $key) {
							 | 
						||
| 
								 | 
							
								            if (isset($this->connections[$key])) {
							 | 
						||
| 
								 | 
							
								                $connections[] = $this->connections[$key];
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return $connections;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |