欢迎来到虫虫下载站 | 资源下载 资源专辑 关于我们
虫虫下载站

smartirc.php.tmp

PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。
TMP
第 1 页 / 共 5 页
字号:
                        $ircdata->channel = $lineex[2];                    } else if ($ircdata->type & (SMARTIRC_TYPE_WHO|                                        SMARTIRC_TYPE_BANLIST|                                        SMARTIRC_TYPE_TOPIC|                                        SMARTIRC_TYPE_CHANNELMODE)) {                        $ircdata->channel = $lineex[3];                    } else if ($ircdata->type & SMARTIRC_TYPE_NAME) {                        $ircdata->channel = $lineex[4];                    }                                        if ($ircdata->channel !== null) {                        if (substr($ircdata->channel, 0, 1) == ':') {                            $ircdata->channel = substr($ircdata->channel, 1);                        }                    }                                        $this->log(SMARTIRC_DEBUG_MESSAGEPARSER, 'DEBUG_MESSAGEPARSER: ircdata nick: "'.$ircdata->nick.                                                                '" ident: "'.$ircdata->ident.                                                                '" host: "'.$ircdata->host.                                                                '" type: "'.$ircdata->type.                                                                '" from: "'.$ircdata->from.                                                                '" channel: "'.$ircdata->channel.                                                                '" message: "'.$ircdata->message.                                                                '"', __FILE__, __LINE__);                }                                // lets see if we have a messagehandler for it                $this->_handlemessage($messagecode, $ircdata);                                    if ($validmessage == true) {                    // now the actionhandlers are comming                    $this->_handleactionhandler($ircdata);                }                                if (isset($ircdata)) {                    unset($ircdata);                }            }        }    }        /**     * sends the pong for keeping alive     *     * Sends the PONG signal as reply of the PING from the IRC server.     *     * @param string $data     * @return void     * @access private     */    function _pong($data)    {        $this->log(SMARTIRC_DEBUG_CONNECTION, 'DEBUG_CONNECTION: Ping? Pong!', __FILE__, __LINE__);        $this->_send('PONG '.$data, SMARTIRC_CRITICAL);    }        /**     * returns the calculated selecttimeout value     *     * @return integer selecttimeout in microseconds     * @access private     */    function _selecttimeout() {        if ($this->_messagebuffersize == 0) {            $this->_selecttimeout = null;                        if ($this->_mintimer != false) {                $this->_calculateselecttimeout($this->_mintimer);            }                        if ($this->_autoreconnect == true) {                $this->_calculateselecttimeout($this->_rxtimeout*1000);            }                        $this->_calculateselecttimeout($this->_maxtimer);            return $this->_selecttimeout;        } else {            return $this->_senddelay;        }    }        /**     * calculates the selecttimeout value     *     * @return void     * @access private     */    function _calculateselecttimeout($microseconds)    {        if (($this->_selecttimeout > $microseconds) || $this->_selecttimeout === null) {            $this->_selecttimeout = $microseconds;        }    }        /**     * updates _mintimer to the smallest timer interval     *     * @return void     * @access private     */    function _updatemintimer()    {        $timerarray = array();        foreach ($this->_timehandler as $values) {            $timerarray[] = $values->interval;        }                $result = array_multisort($timerarray, SORT_NUMERIC, SORT_ASC);        if ($result == true && isset($timerarray[0])) {            $this->_mintimer = $timerarray[0];        } else {            $this->_mintimer = false;        }    }        /**     * reorders the actionhandler array, needed after removing one     *     * @return void     * @access private     */    function _reorderactionhandler()    {        $orderedactionhandler = array();        foreach ($this->_actionhandler as $value) {            $orderedactionhandler[] = $value;        }        $this->_actionhandler = &$orderedactionhandler;    }        /**     * reorders the timehandler array, needed after removing one     *     * @return void     * @access private     */    function _reordertimehandler()    {        $orderedtimehandler = array();        foreach ($this->_timehandler as $value) {            $orderedtimehandler[] = $value;        }        $this->_timehandler = &$orderedtimehandler;    }        /**     * reorders the modules array, needed after removing one     *     * @return void     * @access private     */    function _reordermodules()    {        $orderedmodules = array();        foreach ($this->_modules as $value) {            $orderedmodules[] = $value;        }        $this->_modules = &$orderedmodules;    }    /**     * determines the messagetype of $line     *     * Analyses the type of an IRC message and returns the type.     *     * @param string $line     * @return integer SMARTIRC_TYPE_* constant     * @access private     */    function _gettype($line)    {        if (preg_match('/^:[^ ]+? [0-9]{3} .+$/', $line) == 1) {            $lineex = explode(' ', $line);            $code = $lineex[1];                            switch ($code) {                case SMARTIRC_RPL_WELCOME:                case SMARTIRC_RPL_YOURHOST:                case SMARTIRC_RPL_CREATED:                case SMARTIRC_RPL_MYINFO:                case SMARTIRC_RPL_BOUNCE:                    return SMARTIRC_TYPE_LOGIN;                case SMARTIRC_RPL_LUSERCLIENT:                case SMARTIRC_RPL_LUSEROP:                case SMARTIRC_RPL_LUSERUNKNOWN:                case SMARTIRC_RPL_LUSERME:                case SMARTIRC_RPL_LUSERCHANNELS:                    return SMARTIRC_TYPE_INFO;                case SMARTIRC_RPL_MOTDSTART:                case SMARTIRC_RPL_MOTD:                case SMARTIRC_RPL_ENDOFMOTD:                    return SMARTIRC_TYPE_MOTD;                case SMARTIRC_RPL_NAMREPLY:                case SMARTIRC_RPL_ENDOFNAMES:                    return SMARTIRC_TYPE_NAME;                case SMARTIRC_RPL_WHOREPLY:                case SMARTIRC_RPL_ENDOFWHO:                    return SMARTIRC_TYPE_WHO;                case SMARTIRC_RPL_LISTSTART:                    return SMARTIRC_TYPE_NONRELEVANT;                case SMARTIRC_RPL_LIST:                case SMARTIRC_RPL_LISTEND:                    return SMARTIRC_TYPE_LIST;                case SMARTIRC_RPL_BANLIST:                case SMARTIRC_RPL_ENDOFBANLIST:                    return SMARTIRC_TYPE_BANLIST;                case SMARTIRC_RPL_TOPIC:                    return SMARTIRC_TYPE_TOPIC;                case SMARTIRC_RPL_WHOISUSER:                case SMARTIRC_RPL_WHOISSERVER:                case SMARTIRC_RPL_WHOISOPERATOR:                case SMARTIRC_RPL_WHOISIDLE:                case SMARTIRC_RPL_ENDOFWHOIS:                case SMARTIRC_RPL_WHOISCHANNELS:                    return SMARTIRC_TYPE_WHOIS;                case SMARTIRC_RPL_WHOWASUSER:                case SMARTIRC_RPL_ENDOFWHOWAS:                    return SMARTIRC_TYPE_WHOWAS;                case SMARTIRC_RPL_UMODEIS:                    return SMARTIRC_TYPE_USERMODE;                case SMARTIRC_RPL_CHANNELMODEIS:                    return SMARTIRC_TYPE_CHANNELMODE;                case SMARTIRC_ERR_NICKNAMEINUSE:                case SMARTIRC_ERR_NOTREGISTERED:                    return SMARTIRC_TYPE_ERROR;                default:                    $this->log(SMARTIRC_DEBUG_IRCMESSAGES, 'DEBUG_IRCMESSAGES: replycode UNKNOWN ('.$code.'): "'.$line.'"', __FILE__, __LINE__);            }        }                if (preg_match('/^:.*? PRIVMSG .* :'.chr(1).'ACTION .*'.chr(1).'$/', $line) == 1) {            return SMARTIRC_TYPE_ACTION;        } else if (preg_match('/^:.*? PRIVMSG .* :'.chr(1).'.*'.chr(1).'$/', $line) == 1) {            return SMARTIRC_TYPE_CTCP;        } else if (preg_match('/^:.*? PRIVMSG (\&|\#|\+|\!).* :.*$/', $line) == 1) {            return SMARTIRC_TYPE_CHANNEL;        } else if (preg_match('/^:.*? PRIVMSG .*:.*$/', $line) == 1) {            return SMARTIRC_TYPE_QUERY;        } else if (preg_match('/^:.*? NOTICE .* :.*$/', $line) == 1) {            return SMARTIRC_TYPE_NOTICE;        } else if (preg_match('/^:.*? INVITE .* .*$/', $line) == 1) {            return SMARTIRC_TYPE_INVITE;        } else if (preg_match('/^:.*? JOIN .*$/', $line) == 1) {            return SMARTIRC_TYPE_JOIN;        } else if (preg_match('/^:.*? TOPIC .* :.*$/', $line) == 1) {            return SMARTIRC_TYPE_TOPICCHANGE;        } else if (preg_match('/^:.*? NICK .*$/', $line) == 1) {            return SMARTIRC_TYPE_NICKCHANGE;        } else if (preg_match('/^:.*? KICK .* .*$/', $line) == 1) {            return SMARTIRC_TYPE_KICK;        } else if (preg_match('/^:.*? PART .*$/', $line) == 1) {            return SMARTIRC_TYPE_PART;        } else if (preg_match('/^:.*? MODE .* .*$/', $line) == 1) {            return SMARTIRC_TYPE_MODECHANGE;        } else if (preg_match('/^:.*? QUIT :.*$/', $line) == 1) {            return SMARTIRC_TYPE_QUIT;        } else {            $this->log(SMARTIRC_DEBUG_MESSAGETYPES, 'DEBUG_MESSAGETYPES: SMARTIRC_TYPE_UNKNOWN!: "'.$line.'"', __FILE__, __LINE__);            return SMARTIRC_TYPE_UNKNOWN;        }    }        /**     * updates the current connection state     *     * @return boolean     * @access private     */    function _updatestate()    {        $rtype = get_resource_type($this->_socket);        if ((is_resource($this->_socket)) &&            ($this->_socket !== false) &&            ($rtype == 'socket' || $rtype == 'Socket' || $rtype == 'stream')) {                        $this->_state = true;            return true;        } else {            $this->_state = false;            $this->_loggedin = false;            return false;        }    }        /**     * returns the current connection state     *     * @return integer SMARTIRC_STATE_CONNECTED or SMARTIRC_STATE_DISCONNECTED     * @access private     */    function _state()    {        $result = $this->_updatestate();                if ($result == true) {            return SMARTIRC_STATE_CONNECTED;        } else {            return SMARTIRC_STATE_DISCONNECTED;        }    }        /**     * tries to find a messagehandler for the received message ($ircdata) and calls it     *     * @param string $messagecode     * @param object $ircdata     * @return void     * @access private     */    function _handlemessage($messagecode, &$ircdata)    {        $found = false;                if (is_numeric($messagecode)) {            if (!array_key_exists($messagecode, $this->nreplycodes)) {                $this->log(SMARTIRC_DEBUG_MESSAGEHANDLER, 'DEBUG_MESSAGEHANDLER: ignoring unreconzied messagecode! "'.$messagecode.'"', __FILE__, __LINE__);                $this->log(SMARTIRC_DEBUG_MESSAGEHANDLER, 'DEBUG_MESSAGEHANDLER: this IRC server ('.$this->_address.') doesn\'t conform to the RFC 2812!', __FILE__, __LINE__);                return;            }                        $methodname = 'event_'.strtolower($this->nreplycodes[$messagecode]);            $_methodname = '_'.$methodname;            $_codetype = 'by numeric';        } else if (is_string($messagecode)) { // its not numericcode so already a name/string            $methodname = 'event_'.strtolower($messagecode);            $_methodname = '_'.$methodname;            $_codetype = 'by string';        }                // if exists call internal method for the handling        if (@method_exists($this, $_methodname)) {           $this->log(SMARTIRC_DEBUG_MESSAGEHANDLER, 'DEBUG_MESSAGEHANDLER: calling internal method "'.get_class($this).'->'.$_methodname.'" ('.$_codetype.')', __FILE__, __LINE__);           $this->$_methodname($ircdata);           $found = true;        }                // if exist, call user defined method for the handling        if (@method_exists($this, $methodname)) {           $this->log(SMARTIRC_DEBUG_MESSAGEHANDLER, 'DEBUG_MESSAGEHANDLER: calling user defined method "'.get_class($this).'->'.$methodname.'" ('.$_codetype.')', __FILE__, __LINE__);           $this->$methodname($ircdata);           $found = true;        }                if ($found == false) {            $this->log(SMARTIRC_DEBUG_MESSAGEHANDLER, 'DEBUG_MESSAGEHANDLER: no method found for "'.$messagecode.'" ('.$methodname.')', __FILE__, __LINE__);        }    }        /**     * tries to find a actionhandler for the received message ($ircdata) and calls it     *     * @param object $ircdata     * @return void     * @access private     */    function _handleactionhandler(&$ircdata)    {        $handler = &$this->_actionhandler;        $handlercount = count($handler);        for ($i = 0; $i < $handlercount; $i++) {            $handlerobject = &$handler[$i];                        if (substr($handlerobject->message, 0, 1) == '/') {                $regex = $handlerobject->message;            } else {                $regex = '/'.$handlerobject->message.'/';            }                        if (($handlerobject->type & $ircdata->type) &&                (preg_match($regex, $ircdata->message) == 1)) {                                $this->log(SMARTIRC_DEBUG_ACTIONHANDLER, 'DEBUG_ACTIONHANDLER: actionhandler match found for id: '.$i.' type: '.$ircdata->type.' message: "'.$ircdata->message.'" regex: "'.$regex.'"', __FILE__, __LINE__);                                $methodobject = &$handlerobject->object;                $method = $handlerobject->method;                                if (@method_exists($methodobject, $method)) {                    $this->log(SMARTIRC_DEBUG_ACTIONHANDLER, 'DEBUG_ACTIONHANDLER: calling method "'.get_class($methodobject).'->'.$method.'"', __FILE__, __LINE__);                    $methodobject->$method($this, $ircdata);                } else {                    $this->log(SMARTIRC_DEBUG_ACTIONHANDLER, 'DEBUG_ACTIONHANDLER: method doesn\'t exist! "'.get_class($methodobject).'->'.$method.'"', __FILE__, __LINE__);                }                                break;            }        }    }        /**     * getting current microtime, needed for benchmarks     *     * @return float     * @access private     */    function _microint()    {        $tmp = microtime();        $parts = explode(' ', $tmp);        $floattime = (float)$parts[0] + (float)$parts[1];        return $floattime;    }        /**     * adds an user to the channelobject or updates his info     *     * @pa

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -