class ReactorSpinController: STATE_STOPPED = 0 STATE_STARTED = 1 STATE_SHUTTING_DOWN = 2 def __init__(self, evManager): self.state = ReactorSpinController.STATE_STOPPED self.evManager = evManager self.evManager.RegisterListener( self ) self.reactor = SelectReactor() installReactor(self.reactor) self.loopingCall = LoopingCall(self.FireTick) #---------------------------------------------------------------------- def FireTick(self): self.evManager.Post( TickEvent() ) #---------------------------------------------------------------------- def Run(self): self.state = ReactorSpinController.STATE_STARTED framesPerSecond = 10 interval = 1.0 / framesPerSecond self.loopingCall.start(interval) self.reactor.run() #---------------------------------------------------------------------- def Stop(self): print 'stopping the reactor' self.state = ReactorSpinController.STATE_SHUTTING_DOWN self.reactor.addSystemEventTrigger('after', 'shutdown', self.onReactorStop) self.reactor.stop() #---------------------------------------------------------------------- def onReactorStop(self): print 'reactor is now totally stopped' self.state = ReactorSpinController.STATE_STOPPED self.reactor = None #---------------------------------------------------------------------- def Notify(self, event): if isinstance( event, QuitEvent ): self.Stop()