mirror of
https://github.com/p4gefau1t/trojan-go.git
synced 2024-04-21 12:21:34 +00:00
28 lines
554 B
Go
28 lines
554 B
Go
package common
|
|
|
|
type OptionHandler interface {
|
|
Name() string
|
|
Handle() error
|
|
Priority() int
|
|
}
|
|
|
|
var handlers = make(map[string]OptionHandler)
|
|
|
|
func RegisterOptionHandler(h OptionHandler) {
|
|
handlers[h.Name()] = h
|
|
}
|
|
|
|
func PopOptionHandler() (OptionHandler, error) {
|
|
var maxHandler OptionHandler = nil
|
|
for _, h := range handlers {
|
|
if maxHandler == nil || maxHandler.Priority() < h.Priority() {
|
|
maxHandler = h
|
|
}
|
|
}
|
|
if maxHandler == nil {
|
|
return nil, NewError("No options left")
|
|
}
|
|
delete(handlers, maxHandler.Name())
|
|
return maxHandler, nil
|
|
}
|