This repository has been archived on 2024-07-18. You can view files and clone it, but cannot push or open issues or pull requests.
lwb5/ircbot/remote.php

213 lines
5.1 KiB
PHP

<?php
/*
+---------------------------------------------------------------------------
| PHP-IRC v2.2.1 Service Release
| ========================================================
| by Manick
| (c) 2001-2005 by http://www.phpbots.org/
| Contact: manick@manekian.com
| irc: #manekian@irc.rizon.net
| ========================================
+---------------------------------------------------------------------------
| > remote class module
| > Module written by Manick
| > Module Version Number: 2.2.0
+---------------------------------------------------------------------------
| > This program is free software; you can redistribute it and/or
| > modify it under the terms of the GNU General Public License
| > as published by the Free Software Foundation; either version 2
| > of the License, or (at your option) any later version.
| >
| > This program 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 General Public License for more details.
| >
| > You should have received a copy of the GNU General Public License
| > along with this program; if not, write to the Free Software
| > Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+---------------------------------------------------------------------------
| Changes
| =======-------
| > If you wish to suggest or submit an update/change to the source
| > code, email me at manick@manekian.com with the change, and I
| > will look to adding it in as soon as I can.
+---------------------------------------------------------------------------
*/
/* Remote, a class to handle addQuery connection from ircClass */
class remote {
//External Classes
private $socketClass;
private $ircClass;
private $timerClass;
//Internal variables
private $host;
private $port;
private $query;
private $line;
private $class;
private $function;
private $connTimeout;
private $transTimeout;
private $sockInt;
private $connection;
private $connected;
//Output internal variables
private $response;
private $type;
function __construct($host, $port, $query, $line, $class, $function, $transTimeout)
{
$this->host = $host;
$this->port = $port;
$this->query = $query;
$this->line = $line;
$this->class = $class;
$this->function = $function;
$this->transTimeout = $transTimeout;
$this->response = "";
$this->connected = false;
$this->type = QUERY_SUCCESS;
}
public function setSocketClass($class)
{
$this->socketClass = $class;
}
public function setIrcClass($class)
{
$this->ircClass = $class;
}
public function setTimerClass($class)
{
$this->timerClass = $class;
}
public function connect()
{
if ($this->host == null || $this->port == null)
{
return false;
}
if (!is_object($this->socketClass))
{
return false;
}
if (!is_object($this->ircClass))
{
return false;
}
$conn = new connection($this->host, $this->port, CONNECT_TIMEOUT);
$conn->setSocketClass($this->socketClass);
$conn->setIrcClass($this->ircClass);
$conn->setCallbackClass($this);
$conn->setTimerClass($this->timerClass);
/* Set Timeouts */
$conn->setTransTimeout($this->transTimeout);
$conn->init();
if ($conn->getError())
{
$this->setError("Could not allocate socket");
return false;
}
$this->sockInt = $conn->getSockInt();
$conn->connect();
$this->connection = $conn;
return true;
}
public function disconnect()
{
$this->connection->disconnect();
$this->setError("Manual disconnect");
}
/* Specific handling functions */
public function onTransferTimeout($conn)
{
$this->connection->disconnect();
$this->setError("The connection timed out");
}
public function onConnectTimeout($conn)
{
$this->connection->disconnect();
$this->setError("Connection attempt timed out");
}
public function onConnect($conn)
{
$this->connected = true;
$this->socketClass->sendSocket($this->sockInt, $this->query);
}
public function onRead($conn)
{
$this->response .= $this->socketClass->getQueue($this->sockInt);
}
public function onWrite($conn)
{
// do nothing, we really don't care about this
}
public function onDead($conn)
{
$this->connection->disconnect();
if ($this->connected === true)
{
$this->doCallback();
}
else
{
$this->setError($this->connection->getErrorMsg());
}
}
/* Error handling */
private function setError($msg)
{
$this->response = $msg;
$this->type = QUERY_ERROR;
$this->doCallback();
}
private function doCallback()
{
if ($this->line != null && is_array($this->line) && isset($this->line['text']))
{
$lineArgs = parser::createLine($this->line['text']);
}
else
{
$lineArgs = array();
}
$func = $this->function;
$this->class->$func($this->line, $lineArgs, $this->type, $this->response);
}
}
?>