smartirc.php
来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· PHP 代码 · 共 1,982 行 · 第 1/5 页
PHP
1,982 行
<?php
/**
* $Id: SmartIRC.php 6819 2007-06-20 13:09:21Z kevin_fourie $
* $Revision: 6819 $
* $Author: kevin_fourie $
* $Date: 2007-06-20 15:09:21 +0200 (Wed, 20 Jun 2007) $
*
* Net_SmartIRC
* This is a PHP class for communication with IRC networks,
* which conforms to the RFC 2812 (IRC protocol).
* It's an API that handles all IRC protocol messages.
* This class is designed for creating IRC bots, chats and show irc related info on webpages.
*
* Documenation, a HOWTO and examples are in SmartIRC included.
*
* Here you will find a service bot which I am also developing
* <http://cvs.meebey.net/atbs> and <http://cvs.meebey.net/phpbitch>
* Latest versions of Net_SmartIRC you will find on the project homepage
* or get it through PEAR since SmartIRC is an official PEAR package.
* See <http://pear.php.net/Net_SmartIRC>.
*
* Official Projet Homepage: <http://sf.net/projects/phpsmartirc>
*
* Net_SmartIRC conforms to RFC 2812 (Internet Relay Chat: Client Protocol)
*
* Copyright (c) 2002-2003 Mirco 'meebey' Bauer <meebey@meebey.net> <http://www.meebey.net>
*
* Full LGPL License: <http://www.gnu.org/licenses/lgpl.txt>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
// ------- PHP code ----------
include_once('SmartIRC/defines.php');
include_once('SmartIRC/irccommands.php');
include_once('SmartIRC/messagehandler.php');
define('SMARTIRC_VERSION', '1.0.0 ($Revision: 6819 $)');
define('SMARTIRC_VERSIONSTRING', 'Net_SmartIRC '.SMARTIRC_VERSION);
/**
* main SmartIRC class
*
* @package Net_SmartIRC
* @version 0.5.5
* @author Mirco 'meebey' Bauer <mail@meebey.net>
* @access public
*/
class Net_SmartIRC_base
{
/**
* @var resource
* @access private
*/
var $_socket;
/**
* @var string
* @access private
*/
var $_address;
/**
* @var integer
* @access private
*/
var $_port;
/**
* @var string
* @access private
*/
var $_nick;
/**
* @var string
* @access private
*/
var $_username;
/**
* @var string
* @access private
*/
var $_realname;
/**
* @var string
* @access private
*/
var $_usermode;
/**
* @var string
* @access private
*/
var $_password;
/**
* @var boolean
* @access private
*/
var $_state = false;
/**
* @var array
* @access private
*/
var $_actionhandler = array();
/**
* @var array
* @access private
*/
var $_timehandler = array();
/**
* @var integer
* @access private
*/
var $_debug = SMARTIRC_DEBUG_NOTICE;
/**
* @var array
* @access private
*/
var $_messagebuffer = array();
/**
* @var integer
* @access private
*/
var $_messagebuffersize;
/**
* @var boolean
* @access private
*/
var $_usesockets = false;
/**
* @var integer
* @access private
*/
var $_receivedelay = 100;
/**
* @var integer
* @access private
*/
var $_senddelay = 250;
/**
* @var integer
* @access private
*/
var $_logdestination = SMARTIRC_STDOUT;
/**
* @var resource
* @access private
*/
var $_logfilefp = 0;
/**
* @var string
* @access private
*/
var $_logfile = 'Net_SmartIRC.log';
/**
* @var integer
* @access private
*/
var $_disconnecttime = 1000;
/**
* @var boolean
* @access private
*/
var $_loggedin = false;
/**
* @var boolean
* @access private
*/
var $_benchmark = false;
/**
* @var integer
* @access private
*/
var $_benchmark_starttime;
/**
* @var integer
* @access private
*/
var $_benchmark_stoptime;
/**
* @var integer
* @access private
*/
var $_actionhandlerid = 0;
/**
* @var integer
* @access private
*/
var $_timehandlerid = 0;
/**
* @var array
* @access private
*/
var $_motd = array();
/**
* @var array
* @access private
*/
var $_channels = array();
/**
* @var boolean
* @access private
*/
var $_channelsyncing = false;
/**
* @var string
* @access private
*/
var $_ctcpversion;
/**
* @var mixed
* @access private
*/
var $_mintimer = false;
/**
* @var integer
* @access private
*/
var $_maxtimer = 300000;
/**
* @var integer
* @access private
*/
var $_txtimeout = 300;
/**
* @var integer
* @access private
*/
var $_rxtimeout = 300;
/**
* @var integer
* @access private
*/
var $_selecttimeout;
/**
* @var integer
* @access private
*/
var $_lastrx;
/**
* @var integer
* @access private
*/
var $_lasttx;
/**
* @var boolean
* @access private
*/
var $_autoreconnect = false;
/**
* @var boolean
* @access private
*/
var $_autoretry = false;
/**
* All IRC replycodes, the index is the replycode name.
*
* @see $SMARTIRC_replycodes
* @var array
* @access public
*/
var $replycodes;
/**
* All numeric IRC replycodes, the index is the numeric replycode.
*
* @see $SMARTIRC_nreplycodes
* @var array
* @access public
*/
var $nreplycodes;
/**
* Stores all channels in this array where we are joined, works only if channelsyncing is activated.
* Eg. for accessing a user, use it like this: (in this example the SmartIRC object is stored in $irc)
* $irc->channel['#test']->users['meebey']->nick;
*
* @see setChannelSyncing()
* @see Net_SmartIRC_channel
* @see Net_SmartIRC_channeluser
* @var array
* @access public
*/
var $channel;
/**
* Constructor. Initiales the messagebuffer and "links" the replycodes from
* global into properties. Also some PHP runtime settings are configured.
*
* @access public
* @return void
*/
function Net_SmartIRC_base()
{
// precheck
$this->_checkPHPVersion();
ob_implicit_flush(true);
@set_time_limit(0);
ignore_user_abort(true);
$this->_messagebuffer[SMARTIRC_CRITICAL] = array();
$this->_messagebuffer[SMARTIRC_HIGH] = array();
$this->_messagebuffer[SMARTIRC_MEDIUM] = array();
$this->_messagebuffer[SMARTIRC_LOW] = array();
$this->replycodes = &$GLOBALS['SMARTIRC_replycodes'];
$this->nreplycodes = &$GLOBALS['SMARTIRC_nreplycodes'];
// hack till PHP allows (PHP5) $object->method($param)->$object
$this->channel = &$this->_channels;
// another hack
$this->user = &$this->_users;
if (isset($_SERVER['REQUEST_METHOD'])) {
// the script is called from a browser, lets set default log destination
// to SMARTIRC_BROWSEROUT (makes browser friendly output)
$this->setLogdestination(SMARTIRC_BROWSEROUT);
}
}
/**
* Enables/disables the usage of real sockets.
*
* Enables/disables the usage of real sockets instead of fsocks
* (works only if your PHP build has loaded the PHP socket extension)
* Default: false
*
* @param bool $boolean
* @return void
* @access public
*/
function setUseSockets($boolean)
{
if ($boolean === true) {
if (@extension_loaded('sockets')) {
$this->_usesockets = true;
} else {
$this->log(SMARTIRC_DEBUG_NOTICE, 'WARNING: socket extension not loaded, trying to load it...', __FILE__, __LINE__);
if (strtoupper(substr(PHP_OS, 0,3) == 'WIN')) {
$load_status = @dl('php_sockets.dll');
} else {
$load_status = @dl('sockets.so');
}
if ($load_status) {
$this->log(SMARTIRC_DEBUG_NOTICE, 'WARNING: socket extension succesfully loaded', __FILE__, __LINE__);
$this->_usesockets = true;
} else {
$this->log(SMARTIRC_DEBUG_NOTICE, 'WARNING: couldn\'t load the socket extension', __FILE__, __LINE__);
$this->log(SMARTIRC_DEBUG_NOTICE, 'WARNING: your PHP build doesn\'t support real sockets, will use fsocks instead', __FILE__, __LINE__);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?