Skip to content
Simple, powerful and easy to use OOP API for event driven async systems (libevent, libev, etc).
Branch: master
Clone or download
Pull request Compare This branch is 4 commits ahead, 4 commits behind amal:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
Exceptions
Tests
examples
.gitignore
.travis.yml
CHANGELOG.md
Event.php
EventBase.php
EventBasic.php
EventBuffer.php
LICENSE.md
README.md
composer.json
phpunit.xml.dist

README.md

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

You can’t perform that action at this time.