aza/libevent

AzaLibEvent - Simple, powerful and easy to use OOP wrapper for the LibEvent PHP bindings. Component from Anizoptera CMF.

Installs: 6 684

Dependents: 1

Stars: 3

Watchers: 1

Forks: 1

Open Issues: 3

Language: PHP

v1.1 2013-05-28 13:02 UTC

README

Simple, powerful and easy to use OOP wrapper for the LibEvent PHP bindings.

https://github.com/Anizoptera/AzaLibEvent

Build Status

Table of Contents

  1. Introduction
  2. Requirements
  3. Installation
  4. Examples
  5. Credits
  6. License
  7. Links

Introduction

Main features:

  • 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.

{
    "require": {
        "aza/libevent": "~1.0"
    }
}

Examples

Example #1 - Polling STDIN using basic API

See examples/basic_api.php

/**
 * 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

/**
 * 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.

License

Released under the MIT license.

Links