All pastes #524082 Raw Edit

Miscellany

public text v1 · immutable
#524082 ·published 2007-05-31 00:01 UTC
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
}

// connet here, send USER nad NICK, start a cycle and handle messages

?>