POX中Event的监听方法
内容源自注释文件。文档位置: ../pox/lib/revent/revent.py
1、监听单独的event可以采用的方法:
<br />
def bar_handler(self, event):<br />
print "bar!", event</p>
<p>pox.core.addListener(UpEvent, bar_handler)
<br />
class Sink (EventMixin):<br />
def __init__(self):<br />
# 通知revent,监听pox.core产生的events<br />
self.listenTo(pox.core)</p>
<p>def _handle_ComponentRegistered (self, event):<br />
# 函数名有特殊含义:带有 '_handle_' 和 已注册的<br />
# EventType 的函数会被自动认为是event handler<br />
# 当pox.core启动一个事件时,会自动调用这个处理函数。</p>
<p># Most event handlers are passed an event object<br />
# as a parameter (though individual Event classes<br />
# can override this behavior by altering their<br />
# _invoke() method).<br />
component = event.component<br />
name = event.name<br />
print "I see you,", name, "!"
<br />
class Source (EventMixin):<br />
# 这个定义告诉revent库,这个源可以启动什么样的event<br />
_eventMixin_events = set([ComponentRegistered])</p>
<p>def __init__ (self):<br />
foo()</p>
<p>def foo (self):<br />
# 如下步骤启动events<br />
component = "fake_pox_component"<br />
self.raiseEvent(ComponentRegistered(component))</p>
<p># In the above invocation, the argument is an<br />
# instance of ComponentRegistered (which is a<br />
# subclass of Event). The following is funct-<br />
# ionally equivalent, but has the nice property<br />
# that ComponentRegistered is never instantiated<br />
# if there are no listeners.<br />
#self.raiseEvent(ComponentRegistered, component)<br />
# In both cases, "component" is passed to the<br />
# __init__ method for the ComponentRegistered class.</p>
<p># The above method invocation will raise an<br />
# exception if an event handler rauses an exception.<br />
# To project yourself from exceptions in handlers,<br />
# see raiseEventNoErrors().