public static function select()
{
$read = self::$read_fds;
$write = self::$write_fds;
$except = null;
$changed = @stream_select($read, $write, $except, self::$secs, self::$usecs);
if ($changed === false) {
JAXLLogger::error("error in the event loop, shutting down...");
/*foreach (self::$read_fds as $fd) {
if (is_resource($fd)) {
print_r(stream_get_meta_data($fd));
}
}*/
exit;
} elseif ($changed > 0) {
// read callback
foreach ($read as $r) {
$fdid = array_search($r, self::$read_fds);
if (isset(self::$read_fds[$fdid])) {
call_user_func(self::$read_cbs[$fdid], self::$read_fds[$fdid]);
}
}
// write callback
foreach ($write as $w) {
$fdid = array_search($w, self::$write_fds);
if (isset(self::$write_fds[$fdid])) {
call_user_func(self::$write_cbs[$fdid], self::$write_fds[$fdid]);
}
}
self::$clock->tick();
} elseif ($changed === 0) {
//JAXLLogger::debug("nothing changed while selecting for read");
self::$clock->tick(self::$secs * pow(10, 6) + self::$usecs);
}
}