开始
这是最核心的部分,用于注册、管理和调用处理器。
它的前提是所有的处理器都继承于一个接口,且实现其中的方法;
管理器便明确的知道如何检查处理器的合法性、及如何调用处理器。
关于这个接口,在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 $_$')