From a6e6d848d6f719710a43ca015027bd93befb721d Mon Sep 17 00:00:00 2001 From: Mikhail Osipov Date: Mon, 8 Mar 2021 02:25:01 +0300 Subject: add cmd, hook, socket help --- pkg/server/hook/hook.go | 48 ++++++++++++++++++++++++++++++++++++------------ 1 file changed, 36 insertions(+), 12 deletions(-) (limited to 'pkg/server/hook/hook.go') diff --git a/pkg/server/hook/hook.go b/pkg/server/hook/hook.go index 36b01d4..1464272 100644 --- a/pkg/server/hook/hook.go +++ b/pkg/server/hook/hook.go @@ -12,7 +12,17 @@ import ( "tunnel/pkg/server/queue" ) -var hooks = map[string]interface{}{} +type Type struct { + Name string + Desc string + Func bool + + Param []opts.Param + + data interface{} +} + +var hooks = map[string]*Type{} type Pipe struct { priv interface{} @@ -112,9 +122,9 @@ func New(desc string) (H, error) { reverse = true } - if i, ok := hooks[name]; !ok { + if hookType, ok := hooks[name]; !ok { return nil, fmt.Errorf("unknown hook '%s'", name) - } else if h, err := initHook(i, opts); err != nil { + } else if h, err := initHook(hookType.data, opts); err != nil { return nil, fmt.Errorf("%s: %w", name, err) } else { w := &wrapper{ @@ -126,29 +136,39 @@ func New(desc string) (H, error) { } } -func register(name string, i interface{}) { +func register(name string, desc string, i interface{}) { + var param []opts.Param + switch t := reflect.TypeOf(i); t.Kind() { case reflect.Struct: if _, ok := reflect.New(t).Interface().(Hooker); !ok { - log.Panicf("uncompatible hook type '%s'", t.String()) + log.Panicf("uncompatible hook type '%s'", t) } + param = opts.Parametrize(t) case reflect.Func: if _, ok := i.(Func); !ok { - log.Panicf("uncompatible func type '%s'", t.String()) + log.Panicf("uncompatible func type '%s'", t) } default: - log.Panicf("non-struct and non-func type '%s'", t.String()) + log.Panicf("non-struct and non-func type '%s'", t) } if _, ok := hooks[name]; ok { log.Panicf("duplicate hook name '%s'", name) } - hooks[name] = i + hooks[name] = &Type{ + Name: name, + Desc: desc, + + Param: param, + + data: i, + } } -func registerFunc(name string, f Func) { - register(name, f) +func registerFunc(name string, desc string, f Func) { + register(name, desc, f) } type pipeHolder struct { @@ -159,8 +179,8 @@ func (p pipeHolder) New(env.Env) (interface{}, error) { return p.i, nil } -func registerPipe(name string, i interface{}) { - register(name, pipeHolder{i}) +func registerPipe(name string, desc string, i interface{}) { + register(name, desc, pipeHolder{i}) } func GetList() []string { @@ -174,3 +194,7 @@ func GetList() []string { return list } + +func GetType(name string) *Type { + return hooks[name] +} -- cgit v1.2.3-70-g09d2