开始

这是最核心的部分,用于注册、管理和调用处理器。

它的前提是所有的处理器都继承于一个接口,且实现其中的方法;
管理器便明确的知道如何检查处理器的合法性、及如何调用处理器。

关于这个接口,在handle模块下介绍。

实现

以下代码实现了一个注册中心和调用中心。

#Include ../handle/baseHandle.ahk
#Include parse.ahk

class Mgr {
  static h := Map()

  static Register(which, handler) {
    if not handler() is baseHandle
      throw TypeError('无效的处理器:' handler.Prototype.__Class)
    if Mgr.h.Has(which)
      throw Error('注册重复的命令:' which)
    Mgr.h.Set(which, handler)
    return this
  }

  static Check(cmd) {
    if !(o := Parse(cmd)).valid
      return _fail(o.msg)
    if !Mgr.h.Has(o.which)
      return _fail('未注册的命令:' o.which)
    return _succ(Mgr.h.Get(o.which), o.parsed)

    _succ(h, o) => { valid: true, handler: h, parsed: o }
    _fail(msg) => { valid: false, msg: msg }
  }

  static Call(handler, parsed) {
    if !handler.nullable && !parsed.target
      return handler.Fail('目标不可为空')
    ; try
    r := handler.Handle(parsed)
    ; catch as e {
    ; return handler.Fail('ERROR:' handler.Prototype.__Class ':' e.Message)
    ; }
    return r
  }

}

使用

  • 注册
Mgr
  .Register('echo', Echo)
  • 调用
Mgr.Call('echo', 'hello $_$')
posted on 2024-10-25 13:44  落寞的雪  阅读(9)  评论(0编辑  收藏  举报