POX学习笔记:添加事件监听的方法(POX事件系统后续)

原创博文,转载请说明出处


前面讲到一个事件都有 publisher 和 subscriber,在 pox 中 publisher 和 subscriber 都是 EventMixin 类 (pox.lib.revent.revent.EventMixin) 的子类,例如 POX 中经常用到的 Connection 类、OpenFlow_01_Task 类、POXCore 类,以及 pox.forwarding 中的 components 都继承自 EventMixin,自己写的component也通常都要继承 EventMixin 类。


下面介绍一个设置事件监听常用的几个函数,都定义在 EventMixin 类中:

1.  addListener 

def addListener (self, eventType, handler, once=False, weak=False,  priority=None, byName=False)
    功能:为指定的事件绑定相应的 handler
    eventType:事件类,包括POX中已经定义的事件和自己定义的事件(Event类的子类),如果 byName是True, eventType应该是一个字符串。
    handler:event的处理方法
    once:如果为True,handler将在第一次被触发后移除
    weak:event的 publisher和 subscriber存在依赖关系, 例如handler定义在A中,event在B中抛出,那么A对B有依赖关系,必须在A被realse或者监听关系被移除之后,B才能被realse。如果该值 为False,则publisher和subscriber的生存时间没有关系。
    priority:设置handler的优先级,如果一个事件有多个handler。。。
    byName:默认为False,则 eventType必须为Event类的一个子类,如果为True,则eventType必须为一个字符串

    方法最后会返回一个tuple:(eventType,eid),eid为生成的event的id
    
    example:
    pox.openflow.of_01.OpenFlow_01_Task.__init__()
core.addListener(pox.core.GoingUpEvent, self._handle_GoingUpEvent)
   并且定义了相应的handler
def _handle_GoingUpEvent (self, event):
        self.start()

2. addListenerByName 
def addListenerByName (self, *args, **kw)
    功能:调用上面的 addListener 方法,同时将 byName设为True,因此 eventType必须为字符串


3. listenTo 

def listenTo (self, source, *args, **kv)
    功能:自身监听source中抛出的所有事件,其中source也是一个 EventMixin类的实例。 同时由于 listenTo是定义在 EventMixin类中的一个方法,因此这个方法常见于 EventMixin类的子类中

    example:

    pox.forwarding.l3_learning.l3_switch._handle_GoingUpEvent()
<span style="font-size:12px;">self.listenTo(core.openflow)</span>
    添加对OpenFlow消息的监听

4. addListeners 

    功能:指定source(EventMixin类的子类)将自身设为subscriber

    example:
    pox.forwarding.l2_learning.l2_learning.__init__():

core.openflow.addListeners(self)
    另一种监听OpenFlow消息的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值