Page 1 sur 1

[PHP5] EventManager

Posté : 28 avr. 2006, 14:41
par Vaedan
Bonjour amis développer !

Présentation:

Je vous propose ici une classe en PHP5 (pouvant être portée sur PHP4) vous permettant de rajouter pas mal de dynamisme dans vos scripts, j'ai nommé EventManager.

Cette dernière est grandement inspirée de la classe EventDispatcher native de Flash MX 2004 et plus. Bien sûr elle n'a pas l'interractivité de cette dernière mais peut s'avérer fort utile lors de la conception d'un serveur par exemple.


Utilisation:
class HTTPConnect extends EventManager
{
    public __construct( $connection_handler )
    {
        $this->set_callback( $connection_handler );
    }

    public function open_site( $url )
    {
        $fd = fsockopen( $url, 80 );

        if ( (bool)$fd === true )
        {
            $this->dispatch_event( 'onConnect', $fd );
        }
        else
        {
            $this->dispatch_event( 'onConnectionError' );
        }
    }
}

// Exemple de fichier handler au dessous
$connection = new HTTPConnect( new ConnectionHandler );
Exemple de fichier handler:
interface IConnectionHandler
{
    public function onConnect( &$fd );
    public function onConnectionError();
}

class ConnectionHandler implements IConnectionHandler
{
    public function onConnect( &$fd )
    {
        $content = fread( $fd, 1024 );
        fclose( $fd );
        echo $content;
    }

    public function onConnectionError()
    {
        die( 'Unable to connect' );
    }
}
Commentaire:

Voila. Pour ma part je m'en sert dans le développement d'un serveur de jeu en PHP5. Comme vous avez pu le voir, rien de bien compliqué, d'autant plus qu'on peut simplifier le code sans mettre d'interface par exemple ...

Je sais ce n'est ni du JavaDoc ni du PHPDoc ... Mais c'est comme ça :P


Code source:
class EventManager
{
	// ------------------------------------------------
	// Evénements
	// ------------------------------------------------

	private $callback_object	= false;

	// ================================================================
	// Charge les événements supportés par le serveur
	//
	// @param  object  Evénements
	// ================================================================

	public function set_callback( $object )
	{
		$this->callback_object = $object;
	}

	// ================================================================
	// Déclanche l'événement demandé
	//
	// @param  string  Evénement à déclancher
	// @param  mixed   Paramètres optionnels
	// ================================================================

	public function dispatch_event( $abstract_event )
	{
		// ------------------------------------------------
		// Récupération des paramètres
		// ------------------------------------------------

		// Arguements
		$param = func_get_args();

		// Nom de l'événement
		$event = array_shift( $param );

		// ------------------------------------------------
		// Appel de l'événement
		// ------------------------------------------------

		if ( method_exists( $this->callback_object, $event ) )
		{
			call_user_func_array( array( $this->callback_object, $event ), $param );
		}
	}
}