ioe exposed api:
class ioe {
ioe_client = function connect ($host, $port, $callbacks);
//connect to a host, $object and $callbacks are used to trigger functions on an instance of an object
$callbacks = array (
"connected" => "function()",
"read" => "function($string)",
"disconnected" => "function()",
);
function serv ($port, $callbacks);
//listen on a port and fire events, note the $client object is passed back when connected
$callbacks = array (
"connected" => "function($client, $idx)",
"disconnected" => "function($idx)"
"read" => "function($idx, $string)",
"disconnected" => "function($idx)",
)
ioe_event = function event($time, $object, $function, $args = array());
//$time is either in seconds or a unix timestamp, float or int; $object, $function and $args are the event to fire, returns an $event object
bool = function delEvent(ioe_event);
//give it the result from calling event and it will remove the event without firing it, return true on succes, otherwise false
function go();
//start running the program! this is the start and end of the program within the main scope; the application will exit when there is nothing left to do
}
class ioe_client {
function write($string);
function disconnect();
}
example usage for connecting to servers:
class getWeb {
private $ioe, $con, $url;
private $buffer = "";
function __construct($ioe, $url) {
$r = parse_url($url);
$this->host = $r['host'];
$this->port = (isset($r['port']) ? $r['port'] : 80);
$this->path = (isset($r['path']) ? $r['path'] : "/");
$cb = array(
"read" => array($this, "ioe_read"),
"connected" => array($this, "ioe_connected"),
"disconnected" => array($this, "ioe_disconnected"),
);
$this->con = $ioe->connect($this->host, $this->port, $cb, 5);
$this->ioe =& $ioe;
}
public function ioe_read($str) {
$this->buffer .= $str;
}
public function ioe_timeout() {
$this->con->disconnect();
}
public function ioe_connected() {
$this->con->write("GET ".$this->path." HTTP/1.1\r\nHOST: ".$this->host."\r\nConnection: close\r\n\r");
}
public function ioe_disconnected() {
$this->ioe->event(5, array($this, "spam"));
}
public function spam() {
echo $this->buffer;
}
}
class dostuff {
private $ioe;
function __construct($ioe) {
$this->ioe =& $ioe;
$this->ioe->event(3, array($this, "doYahoo"));
$this->ioe->event(1, array($this, "doGoogle"));
}
public function doGoogle() {
$google = new getWeb($this->ioe, "http://www.google.co.uk");
}
public function doYahoo() {
$yahoo = new getWeb($this->ioe, "http://www.yahoo.co.uk/");
}
}
$ioe = new ioe;
$dostuff = new dostuff($ioe);
$ioe->go();