Skip to content

Simple, powerful and easy to use OOP API for event driven async systems (libevent, libev, etc).

License

Notifications You must be signed in to change notification settings

Anizoptera/AzaLibEvent

 
 

Repository files navigation

AzaLibEvent

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

Packages

No packages published

Languages

  • PHP 100.0%