Skip to content

事件#

事件作为插件与内核沟通的核心能力,通过自定义事件或者侦听内核事件来完成。

事件的定义分为两个部分:

自定义事件#

对事件的一般逻辑是:

注意

在注册事件类型时,为了避免事件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)

侦听内核或其它事件#

内核事件可以参看 内核事件文档

所有事件类型(包含内核与插件注册额事件类型)可以在系统的 扩展能力-事件列表 中查看

注意

事实上,在插件中定义的事件也同样可以被侦听,但由于插件本身可能并不稳定,比如升级之类的会使的相关事件发生变化,所以并不推荐这么做。

评论