事件#
事件作为插件与内核沟通的核心能力,通过自定义事件或者侦听内核事件来完成。
事件的定义分为两个部分:
自定义事件#
对事件的一般逻辑是:
- 注册 事件类型:
- 侦听事件:
- 产生事件:
注意
在注册事件类型时,为了避免事件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)
侦听内核或其它事件#
内核事件可以参看 内核事件文档
所有事件类型(包含内核与插件注册额事件类型)可以在系统的 扩展能力-事件列表 中查看
注意
事实上,在插件中定义的事件也同样可以被侦听,但由于插件本身可能并不稳定,比如升级之类的会使的相关事件发生变化,所以并不推荐这么做。