123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- package admin
- import (
- "errors"
- "fmt"
- "strings"
- )
- // 调度器接口
- type Dispatch interface {
- // 调度器标识
- Key() string
- // 调度器名称
- Name() string
- // 调度器描述
- Description() string
- // 请求调度方法
- Call(*Context) (interface{}, error)
- }
- var dispatchers = make(map[string]Dispatch)
- func RegisterDispatch(dispatcher Dispatch) {
- dispatchers[strings.ToLower(dispatcher.Key())] = dispatcher
- }
- func GetDispatcher(type_ string) (Dispatch, error) {
- type_ = strings.ToLower(type_)
- dispatcher, is := dispatchers[type_]
- if !is {
- return nil, errors.New(fmt.Sprintf("未找到请求类型(%s)对应的调度程序", type_))
- }
- return dispatcher, nil
- }
- func AllDispatcher() map[string]Dispatch {
- return dispatchers
- }
- func AllDispatcherLength() int {
- return len(dispatchers)
- }
- // 默认调度器
- type defaultDispatcher struct {
- HandleMethod map[string]DefaultDispatcherHandleMethod
- }
- func (d *defaultDispatcher) Key() string {
- return "default"
- }
- func (d *defaultDispatcher) Name() string {
- return "默认"
- }
- func (d *defaultDispatcher) Description() string {
- return "Cadmin系统内置的默认请求调度器"
- }
- func (d *defaultDispatcher) Call(c *Context) (interface{}, error) {
- method, is := d.HandleMethod[c.Request.Call]
- if !is {
- return nil, errors.New(fmt.Sprintf("[%s 未注册对应的处理方法]", c.Request.Action))
- }
- r, err := method(c)
- if err != nil {
- return nil, err
- }
- return r, nil
- }
- func (d *defaultDispatcher) Register(methods map[string]DefaultDispatcherHandleMethod) {
- for name, method := range methods {
- if _, is := d.HandleMethod[name]; is {
- panic("[%s] 对应的处理方法已经存在")
- }
- d.HandleMethod[name] = method
- }
- }
- type DefaultDispatcherHandleMethod func(*Context) (interface{}, error)
- var DefaultDispatcher = &defaultDispatcher{HandleMethod: make(map[string]DefaultDispatcherHandleMethod)}
- // 注册默认调度器请求处理方法
- func RegisterDefaultDispatcherHandleMethod(methods map[string]DefaultDispatcherHandleMethod) {
- DefaultDispatcher.Register(methods)
- }
- func init() {
- RegisterDispatch(DefaultDispatcher)
- }
|