关于POX中的lib.revent.py阅读分析

本文详细介绍了POX框架中的事件系统实现原理。包括事件ID生成、错误处理、事件类及混合类的功能,如监听器的添加与移除、事件触发等关键方法。适合初学者快速理解POX事件机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

近期在学习POX,由于没有系统学习过python,所以在阅读代码方面着实苦恼了一番,至此还停留在生读的阶段。

为了不边学边往,特此记录。仅为自身学习记录为目的,若能为大家提供有用的信息,那就再好不过了~~

由简单到复杂:

     1)方法_generateEventID():此方法用来生成self对象的事件ID,可以用来返回_nextEventID,实际上就是对eid进行了+1操作

     2)方法EventError(halt=False,remove=False):返回(halt、,remove)。其中halt=True代表了此事件不再能调用处理函数handler,remove=True则代表了此事件的                      handler 将会被移除,即取消订阅该事件。

     3)方法handleEventException(source, event, args, kw, exc_info):其实就是打印traceback中的异常信息。

     4)类ReventError:revent引发的异常类,继承RuntimelyError,并没有进行方法的复写。
     5)类Event:是所有事件的超父类,其中包含_invoke (self,handler, *args, **kw),可以通过此方法对handler进行复写。

  6)类EventMixin:是最为重要的类,因为用于发布事件的类都是继承该类的,因为其内部定义了,如何添加和移除监听器等方法。初始化该类,则该对象的      事件元组为_eventMixin_events(),该对象的事件与处理函数的字典 _eventMixin_handlers{ }。

     其中。对于监听器的添加操作,就是将所要添加的eventType 和hanlders加入_eventMixin_handlers{ }。返回(eventType,eid)。移除监      听器即从_eventMixin_handlers字典中删除。

6.1raiseEvent (self,event, *args, **kw):用来raise一个事件,若event属于一种eventType,即拥有相应的监听器,将会被args和kw参数初始化并返回event对象。若没有监听器,则不被创建,返回None.

6.2 raiseEventNoErrors (self,event, *args, **kw):当捕获到有handler抛出的异常,则raise一个事件。调用 handleEventException函数进行处理,保证后续事件的执行并打印失败的处理程序handler。

6.3 autoBindEvents(sink, source, prefix='',weak=False, priority=None):自动绑定函数自动为source上raise的事件,在sink上设置对应的listeners。返回被添加的listeners的ID 可以用于移除listeners。listeners=((eventType,eid),(eventType,eid),...)。其中需要注意的是,所需绑定的事件必须有对象的处理函数,而且必须命名为_handle_ methods

6.4  addListener (self, eventType, handler, once=False, weak=False,priority=None, byName=False):添加监听器,返回(eventType,eid)。其实就是将eventtype和handler加入了 _eventMixin_handlers{ }。

6.5 addListeners (self,sink, prefix='', weak=False,priority=None):调用的是自动绑定函数.试图将sink上的所有_handle_ methods绑定到这个对象raise的事件。与listenTo()相反。

6.6 addListenerByName (self,*args, **kw):通过微字符串格式的时间名称和处理函数进行监听。即令参数中的byName为True,调用的是addListener函数。

6.7 listenTo (self,source, *args, **kv):自动订阅source上的所有events,将自身所有的_handle_ methods方法绑定到source时间上,是与addListener()相反。

6.8 _eventMixin_get_listener_count (self):返回监听器的个数。即_eventMixin_handlers中元素的个数。

6.9 removeListener (self, handlerOrEID, eventType=None):移除参数中eventType的监听器。

6.10 removeListeners (self, listeners):对listeners中的元素循环调用removeListener 方法

6.11 clearHandlers(self):移除此对象的所有handlers.即设置_eventMixin_handlers={}为空


对于类callProxy:仅仅知道当订阅者或者发布者对象丢失时,由此类进行清理listener中的发布者对象的条目。

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值