rendered paste body<?php
$server = 'irc.freenode.com';
$port = 6667;
$nickname = 'BotNicks';
$channel = '#autoJoinedChannel';
$server_info = array (); // defines server information one-dimensional array
$socket = false;
$buffer = false;
function connect ($server, $port, $nickname)
{
$socket = socket_create (AF_INET, SOCK_STREAM, SOL_TCP); // Creating new stream full-duplex TCP socket. IPv4
socket_set_block ($socket); // Blocks data transmission while connecting
if (!@socket_connect ($socket, $host, $port))
return false; // Reports connection error
else // Connected
{
socket_set_nonblock ($socket);
return true;
}
}
function sendRaw ($message)
{
if (!is_resource ($socket))
return false;
else
{
socket_send ($socket, $message, strlen($message), 0);
return true;
}
}
function getMessages ()
{
socket_set_nonblock ($socket); // Unblocked
$tmpBuffer = @socket_read ($socket, 1024);
if (socket_last_error ($socket) == 104) // Socket disconnected by peer
return false;
else
{
while ($tmpBuffer != "")
{
$buffer .= $tmpBuffer;
$tmpBuffer = socket_read ($socket, 1024); // Keep reading
}
$tmpBuffer = explode ("\n", $buffer); // Exploding to split messages
// Return last message to buffer
$buffer = $tmpBuffer [count ($tmpBuffer) - 1];
unset ($tmpBuffer [count ($tmpBuffer) - 1]);
return $tmpBuffer;
}
}
function socketWait ()
{
if ($socket)
{
$Socket = array ($socket);
socket_select ($Socket, $write = NULL, $except = NULL, 0, 50);
}
}
function cycle ()
{
while (socketWait () || true) // Waits for messages
{
$new_messages = getMessages ();
if ($new_messages !== false)
{
if (is_array ($new_messages)) // More then one message
{
foreach ($new_messages as $message)
handleMessages ($message);
} else
handleMessages ($message);
}
}
}
function handleMessages ($message)
{
print_R ($message);
// handle the messages here
}
?>