事件#
事件作为插件与内核沟通的核心能力,通过自定义事件或者侦听内核事件来完成。
事件的定义分为两个部分:
自定义事件#
对事件的一般逻辑是:
- 注册 事件类型:
- 侦听事件:
- 产生事件:
注意
在注册事件类型时,为了避免事件tag命名冲突,会在tag前添加该插件的 package + '.' 作为前缀
示例
from arkid.core import extension, event
CUSTOM_EVENT = 'CUSTOM_EVENT'
CUSTOM_EVENT2 = 'CUSTOM_EVENT2'
class CaseExtension(extension.Extension):
def load(self):
super().load()
custom_event_tag = self.register_event(CUSTOM_EVENT, '自定义事件')
custom_event2_tag = self.register_event_type(event.EventType(CUSTOM_EVENT2,'自定义事件2'))
self.listen_event(custom_event_tag,event_handler)
self.listen_event(custom_event2_tag,event_handler)
self.register_api('/custom_event/', 'GET', self.api_func)
self.register_api('/custom_event2/', 'GET', self.api_func2)
def api_func(self, request):
self.dispatch_event(event.Event(CUSTOM_EVENT))
def api_func2(self, request):
self.dispatch_event(event.Event(CUSTOM_EVENT2))
def event_handler(self,event, **kwargs):
print(event.tag)
侦听内核或其它事件#
内核事件可以参看 内核事件文档
所有事件类型(包含内核与插件注册额事件类型)可以在系统的 扩展能力-事件列表 中查看
注意
事实上,在插件中定义的事件也同样可以被侦听,但由于插件本身可能并不稳定,比如升级之类的会使的相关事件发生变化,所以并不推荐这么做。