forked from GNUsocial/gnu-social
		
	
		
			
	
	
		
			302 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			302 lines
		
	
	
		
			8.4 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
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Base class for drivers which handle issuing client commands to the IRC
							 | 
						||
| 
								 | 
							
								 * server and converting responses into usable data objects.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @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
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								abstract class Phergie_Driver_Abstract
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Currently active connection
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @var Phergie_Connection
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    protected $connection;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Sets the currently active connection.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param Phergie_Connection $connection Active connection
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return Phergie_Driver_Abstract Provides a fluent interface
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function setConnection(Phergie_Connection $connection)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $this->connection = $connection;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return $this;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Returns the currently active connection.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return Phergie_Connection
							 | 
						||
| 
								 | 
							
								     * @throws Phergie_Driver_Exception
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function getConnection()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        if (empty($this->connection)) {
							 | 
						||
| 
								 | 
							
								            throw new Phergie_Driver_Exception(
							 | 
						||
| 
								 | 
							
								                'Operation requires an active connection, but none is set',
							 | 
						||
| 
								 | 
							
								                Phergie_Driver_Exception::ERR_NO_ACTIVE_CONNECTION
							 | 
						||
| 
								 | 
							
								            );
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return $this->connection;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Returns an event if one has been received from the server.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return Phergie_Event_Interface|null Event instance if an event has
							 | 
						||
| 
								 | 
							
								     *         been received, NULL otherwise
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public abstract function getEvent();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Initiates a connection with the server.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return void
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public abstract function doConnect();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Terminates the connection with the server.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param string $reason Reason for connection termination (optional)
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return void
							 | 
						||
| 
								 | 
							
								     * @link http://www.irchelp.org/irchelp/rfc/chapter4.html#c4_1_6
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public abstract function doQuit($reason = null);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Joins a channel.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param string $channels Comma-delimited list of channels to join 
							 | 
						||
| 
								 | 
							
								     * @param string $keys     Optional comma-delimited list of channel keys
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return void
							 | 
						||
| 
								 | 
							
								     * @link http://www.irchelp.org/irchelp/rfc/chapter4.html#c4_2_1
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public abstract function doJoin($channels, $keys = null);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Leaves a channel.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param string $channels Comma-delimited list of channels to leave 
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return void
							 | 
						||
| 
								 | 
							
								     * @link http://www.irchelp.org/irchelp/rfc/chapter4.html#c4_2_2
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public abstract function doPart($channels);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Invites a user to an invite-only channel.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param string $nick    Nick of the user to invite
							 | 
						||
| 
								 | 
							
								     * @param string $channel Name of the channel
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return void
							 | 
						||
| 
								 | 
							
								     * @link http://www.irchelp.org/irchelp/rfc/chapter4.html#c4_2_7
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public abstract function doInvite($nick, $channel);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Obtains a list of nicks of users in specified channels.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param string $channels Comma-delimited list of one or more channels
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return void
							 | 
						||
| 
								 | 
							
								     * @link http://www.irchelp.org/irchelp/rfc/chapter4.html#c4_2_5
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public abstract function doNames($channels);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Obtains a list of channel names and topics.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param string $channels Comma-delimited list of one or more channels
							 | 
						||
| 
								 | 
							
								     *                         to which the response should be restricted
							 | 
						||
| 
								 | 
							
								     *                         (optional)
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return void
							 | 
						||
| 
								 | 
							
								     * @link http://www.irchelp.org/irchelp/rfc/chapter4.html#c4_2_6
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public abstract function doList($channels = null);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Retrieves or changes a channel topic.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param string $channel Name of the channel
							 | 
						||
| 
								 | 
							
								     * @param string $topic   New topic to assign (optional)
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return void
							 | 
						||
| 
								 | 
							
								     * @link http://www.irchelp.org/irchelp/rfc/chapter4.html#c4_2_4
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public abstract function doTopic($channel, $topic = null);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Retrieves or changes a channel or user mode.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param string $target Channel name or user nick
							 | 
						||
| 
								 | 
							
								     * @param string $mode   New mode to assign (optional)
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return void
							 | 
						||
| 
								 | 
							
								     * @link http://www.irchelp.org/irchelp/rfc/chapter4.html#c4_2_3
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public abstract function doMode($target, $mode = null);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Changes the client nick.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param string $nick New nick to assign
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return void
							 | 
						||
| 
								 | 
							
								     * @link http://www.irchelp.org/irchelp/rfc/chapter4.html#c4_1_2
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public abstract function doNick($nick);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Retrieves information about a nick.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param string $nick Nick
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return void
							 | 
						||
| 
								 | 
							
								     * @link http://www.irchelp.org/irchelp/rfc/chapter4.html#c4_5_2
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public abstract function doWhois($nick);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Sends a message to a nick or channel.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param string $target Channel name or user nick
							 | 
						||
| 
								 | 
							
								     * @param string $text   Text of the message to send
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return void
							 | 
						||
| 
								 | 
							
								     * @link http://www.irchelp.org/irchelp/rfc/chapter4.html#c4_4_1
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public abstract function doPrivmsg($target, $text);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Sends a notice to a nick or channel.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param string $target Channel name or user nick
							 | 
						||
| 
								 | 
							
								     * @param string $text   Text of the notice to send
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return void
							 | 
						||
| 
								 | 
							
								     * @link http://www.irchelp.org/irchelp/rfc/chapter4.html#c4_4_2
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public abstract function doNotice($target, $text);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Kicks a user from a channel.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param string $nick    Nick of the user
							 | 
						||
| 
								 | 
							
								     * @param string $channel Channel name
							 | 
						||
| 
								 | 
							
								     * @param string $reason  Reason for the kick (optional)
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return void
							 | 
						||
| 
								 | 
							
								     * @link http://www.irchelp.org/irchelp/rfc/chapter4.html#c4_2_8
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public abstract function doKick($nick, $channel, $reason = null);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Responds to a server test of client responsiveness.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param string $daemon Daemon from which the original request originates
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return void
							 | 
						||
| 
								 | 
							
								     * @link http://www.irchelp.org/irchelp/rfc/chapter4.html#c4_6_3
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public abstract function doPong($daemon);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Sends a CTCP ACTION (/me) command to a nick or channel.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param string $target Channel name or user nick
							 | 
						||
| 
								 | 
							
								     * @param string $text   Text of the action to perform
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return void
							 | 
						||
| 
								 | 
							
								     * @link http://www.invlogic.com/irc/ctcp.html#4.4
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public abstract function doAction($target, $text);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Sends a CTCP PING request to a user.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param string $nick User nick
							 | 
						||
| 
								 | 
							
								     * @param string $hash Hash to use in the handshake
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return void
							 | 
						||
| 
								 | 
							
								     * @link http://www.invlogic.com/irc/ctcp.html#4.2
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public abstract function doPing($nick, $hash);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Sends a CTCP VERSION request or response to a user.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param string $nick    User nick
							 | 
						||
| 
								 | 
							
								     * @param string $version Version string to send for a response
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return void
							 | 
						||
| 
								 | 
							
								     * @link http://www.invlogic.com/irc/ctcp.html#4.1
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public abstract function doVersion($nick, $version = null);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Sends a CTCP TIME request to a user.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param string $nick User nick
							 | 
						||
| 
								 | 
							
								     * @param string $time Time string to send for a response
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return void
							 | 
						||
| 
								 | 
							
								     * @link http://www.invlogic.com/irc/ctcp.html#4.6
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public abstract function doTime($nick, $time = null);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Sends a CTCP FINGER request to a user.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param string $nick   User nick
							 | 
						||
| 
								 | 
							
								     * @param string $finger Finger string to send for a response
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return void
							 | 
						||
| 
								 | 
							
								     * @link http://www.irchelp.org/irchelp/rfc/ctcpspec.html 
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public abstract function doFinger($nick, $finger = null);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Sends a raw command to the server.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param string $command Command string to send
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return void
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public abstract function doRaw($command);
							 | 
						||
| 
								 | 
							
								}
							 |