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…
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