diff options
Diffstat (limited to 'pkg/server/socket/socket.go')
| -rw-r--r-- | pkg/server/socket/socket.go | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/pkg/server/socket/socket.go b/pkg/server/socket/socket.go index 03b73d9..ea35be3 100644 --- a/pkg/server/socket/socket.go +++ b/pkg/server/socket/socket.go @@ -72,12 +72,12 @@ func (c *conn) Close() error { func New(desc string, e env.Env) (S, error) { name, opts := opts.Parse(desc) - t, ok := sockets[name] + sockType, ok := sockets[name] if !ok { return nil, fmt.Errorf("%s: unknown type", name) } - s := reflect.New(t).Interface() + s := reflect.New(sockType.t).Interface() if err := opts.Configure(s); err != nil { return nil, fmt.Errorf("%s: %w", name, err) } @@ -101,9 +101,18 @@ func parseProtoAddr(proto, addr string) (string, string) { return proto, addr } -var sockets = map[string]reflect.Type{} +type Type struct { + Desc string + Name string -func register(name string, i interface{}) { + Param []opts.Param + + t reflect.Type +} + +var sockets = map[string]*Type{} + +func register(name string, desc string, i interface{}) { t := reflect.TypeOf(i) if t.Kind() != reflect.Struct { log.Panicf("non-struct type '%s'", t.String()) @@ -114,7 +123,15 @@ func register(name string, i interface{}) { if _, ok := sockets[name]; ok { log.Panicf("duplicate socket name '%s'", name) } - sockets[name] = t + + sockets[name] = &Type{ + Desc: desc, + Name: name, + + Param: opts.Parametrize(t), + + t: t, + } } func GetList() []string { @@ -128,3 +145,7 @@ func GetList() []string { return list } + +func GetType(name string) *Type { + return sockets[name] +} |
