POX事件機制主要分成幾個部分
產生事件(Creat Event)
發布事件(Raising Event)
聆聽事件(Listening to Event)
處理事件(Handling Event)
Listen跟Handling通常是在一起的,聽完就直接動作
事件一定要有對應的處理機制
請不要肇事逃逸
必要匯入
from pox.lib.revent.revent import EventMixin, Event
建立事件 / Creating your Event Type (inherit from Event)
class GameStarted(Event): def __init__(self, name): Event.__init__(self) self.name = name @property def player_ready(self): return self.name == "Baseball"
建立發起事件 / Creating Raising Event (inherit from EventMixin)
class Game(EventMixin): _eventMixin_events = set([ GameStarted, ])
建立處理事件的函數 / Creating Handling Event Function
def start_game(event): print "The Game is Started"
建立聆聽及處理事件的類別 / Creating Listening to / Handling Event Class
class GameHandleClass(object): def __init__(self): game.addListeners(self) #for listen the event def _handle_GameStarted(self, event): print "Game start"
最後當你要發起事件時,需要以下指令 / If you want to raise the event
game = Game() game.raiseEvent(GameStarted("BaseBall"))
記得要註冊 / Don't forget register you class
core.registerNew(Game) core.registerNew(GameHandleClass)
完整程式碼 / Code
#coding=utf-8 from pox.lib.revent.revent import EventMixin, Event from pox.core import core class GameStart(Event): def __init__(self, name): Event.__init__(self) self.name = name @property def player_ready(self): return self.name == "BaseBall" class GameOver(Event): def __init__(self, name): Event.__init__(self) self.name = name class Game(EventMixin): _eventMixin_events = set([ GameStart, GameOver, ]) class GameHandleClass(object): def __init__(self): game.addListeners(self) def _handle_GameStart(self, event): print "The Game is already Start" def _handle_GameOver(self, event): print "It's Game Over" game = Game() def launch(): core.registerNew(Game) core.registerNew(GameHandleClass) game.raiseEvent(GameStart("BaseBall")) game.raiseEvent(GameOver("BaseBall"))
Reference [1] http://www.cnblogs.com/zflibra/p/4051015.html (Available: 2016/01/24)
沒有留言:
張貼留言