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