AzaLibEvent
Simple, powerful and easy to use OOP wrapper for the LibEvent PHP bindings., (*1)
https://github.com/Anizoptera/AzaLibEvent, (*2)
![Build Status][TravisImage], (*3)
Table of Contents
- Introduction
 
- Requirements
 
- Installation
 
- 
Examples
 
- Credits
 
- License
 
- Links
 
Introduction
Main features:, (*4)
- Convenient, fully documented and tested in production API;
 
- Timers and intervals system (look at 
EventBase::timerAdd); 
- Special base reinitializing for forks (look at 
EventBase::reinitialize); 
- Error handling with exceptions;
 
- Automatic resources cleanup;
 
Requirements
Installation
The recommended way to install AzaLibEvent is through composer.
You can see package information on Packagist., (*5)
{
    "require": {
        "aza/libevent": "~1.0"
    }
}
Examples
Example #1 - Polling STDIN using basic API
See examples/basic_api.php, (*6)
/**
 * Callback function to be called when the matching event occurs
 *
 * @param resource $fd     File descriptor
 * @param int      $events What kind of events occurred. See EV_* constants
 * @param array    $args   Event arguments - array(Event $e, mixed $arg)
 */
function print_line($fd, $events, $args)
{
    static $max_requests = 0;
    $max_requests++;
    /**
     * @var $e    Event
     * @var $base EventBase
     */
    list($e, $base) = $args;
    // exit loop after 10 writes
    if ($max_requests == 10) {
        $base->loopExit();
    }
    // print the line
    echo fgets($fd);
}
// Create base
$base = new EventBase;
// Setup and enable event
$ev = new Event();
$ev->set(STDIN, EV_READ|EV_PERSIST, 'print_line', $base)
        ->setBase($base)
        ->add();
// Start event loop
$base->loop();
Example #2 - Polling STDIN using buffered event API
See examples/buffered_api.php, (*7)
/**
 * Callback to invoke where there is data to read
 *
 * @param resource $buf  File descriptor
 * @param array    $args Event arguments - array(EventBuffer $e, mixed $arg)
 */
function print_line($buf, $args)
{
    static $max_requests;
    $max_requests++;
    /**
     * @var $e    EventBuffer
     * @var $base EventBase
     */
    list($e, $base) = $args;
    // exit loop after 10 writes
    if ($max_requests == 10) {
        $base->loopExit();
    }
    // print the line
    echo $e->read(4096);
}
/**
 * Callback to invoke where there is an error on the descriptor.
 * function(resource $buf, int $what, array $args(EventBuffer $e, mixed $arg))
 *
 * @param resource $buf  File descriptor
 * @param int      $what What kind of error occurred. See EventBuffer::E_* constants
 * @param array    $args Event arguments - array(EventBuffer $e, mixed $arg)
 */
function error_func($buf, $what, $args) {}
// I use Base::getEventBase() to operate always with the
// same instance, but you can simply use "new EventBase()"
// Get event base
$base = Base::getEventBase();
// Create buffered event
$ev = new EventBuffer(STDIN, 'print_line', null, 'error_func', $base);
$ev->setBase($base)->enable(EV_READ);
// Start loop
$base->loop();
Credits
AzaLibEvent is a part of Anizoptera CMF, written by Amal Samally (amal.samally at gmail.com) and AzaGroup team., (*8)
License
Released under the MIT license., (*9)
Links