[Pyxoo] Petit exemple rapide d’utilisation de la classe EventBroadcaster

30 juillet 2007,

Afin de compléter mon précédent billet concernant Pyxoo je vous livre ici un premier exemple concernant l’utilisation de la classe EventBroadcaster.

from Pyxoo.events.broadcaster import EventBroadcaster
from Pyxoo.events.event import StringEvent
import sys

# création de listeners proposant une méthode onLog

class LogListener:
def onLog(self, event):
raise NotImplementedError

class TextFileLogger(LogListener):
def __init__(self):
self.__file = open(“mylogs.log”, “w+”)
def onLog(self, event):
self.__file.write(event.getString()+\n)

class StdOutLogger(LogListener):
def onLog(self, event):
sys.stdout.write(event.getString()+\n)

log1 = TextFileLogger()
log2 = StdOutLogger()
EVENT_TYPE = “onLog”

eventBroadcaster = EventBroadcaster()
# on ajoute un listener associé à un type d’événement
# dans l’eventBroadcaster
eventBroadcaster.addEventListener( EVENT_TYPE, log1 )
eventBroadcaster.addEventListener( EVENT_TYPE, log2 )

# création d’un événement avec pour eventType "onLog"
event1 = StringEvent( EVENT_TYPE, “Bonjour” )
event2 = StringEvent( EVENT_TYPE, “Au revoir” )

# diffusion de l’événement. Tous les listeners associés
# à l’événement "onLog" reçoivent l’événement et le traitent.
eventBroadcaster.broadcastEvent( event1 )
eventBroadcaster.broadcastEvent( event2 )

Bien sûr ce n’est qu’un exemple très simple de l’utilisation de la classe. On peut imaginer de nombreux types d’utilisation dans des contextes différents : gestion des événements d’une application Pygame, d’événements provenant d’une socket, etc…

2 Commentaires

Brice Carpentier, le 16 décembre 2007 à 22:35

Bonjour,
Très beau boulot. Une question toutefois : cette partie de PixLib ne ferait-elle pas double-emploi avec le framework de signalling de django ?
http://code.djangoproject.com/wiki/Signals

SkiT, le 16 décembre 2007 à 22:36

Bonjour,
Après une lecture rapide de ce que propose le framework de signalling de Django, il me semble en effet qu’il y est des similitudes : pouvoir diffuser un signal ou évènement vers plusieurs écouteurs. Mais il ne me semble pas que le module signal de Django permette le “typage” des évènements tout comme la diffusion d’évènements sur des canaux sur lesquels les écouteurs sont branchés. Pour ce système de canaux je veux bien sûr parler de celui que propose le ChannelBroadcaster. Pour finir, je ne trouve pas la méthode, que propose Django assez object à mon gout. En effet, le système est proposé sous la forme d’une suite de fonctions.
Je tiens à te remercier tout de même pour tes encouragements. :)


Ajouter un commentaire