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  }