github.com/ipfans/trojan-go@v0.11.0/option/option.go (about) 1 package option 2 3 import "github.com/ipfans/trojan-go/common" 4 5 type Handler interface { 6 Name() string 7 Handle() error 8 Priority() int 9 } 10 11 var handlers = make(map[string]Handler) 12 13 func RegisterHandler(h Handler) { 14 handlers[h.Name()] = h 15 } 16 17 func PopOptionHandler() (Handler, error) { 18 var maxHandler Handler = nil 19 for _, h := range handlers { 20 if maxHandler == nil || maxHandler.Priority() < h.Priority() { 21 maxHandler = h 22 } 23 } 24 if maxHandler == nil { 25 return nil, common.NewError("no option left") 26 } 27 delete(handlers, maxHandler.Name()) 28 return maxHandler, nil 29 }