aza/libevent

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

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

This package is not auto-updated.

Last update: 2024-04-13 11:15:23 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