receiver_manager.go 740 B

123456789101112131415161718192021222324252627282930313233343536
  1. package outbound
  2. import (
  3. "math/rand"
  4. v2net "github.com/v2ray/v2ray-core/common/net"
  5. "github.com/v2ray/v2ray-core/proxy/vmess/config"
  6. )
  7. type ReceiverManager struct {
  8. receivers []*config.Receiver
  9. }
  10. func NewReceiverManager(receivers []*config.Receiver) *ReceiverManager {
  11. return &ReceiverManager{
  12. receivers: receivers,
  13. }
  14. }
  15. func (this *ReceiverManager) PickReceiver() (v2net.Address, config.User) {
  16. receiverLen := len(this.receivers)
  17. receiverIdx := 0
  18. if receiverLen > 1 {
  19. receiverIdx = rand.Intn(receiverLen)
  20. }
  21. receiver := this.receivers[receiverIdx]
  22. userLen := len(receiver.Accounts)
  23. userIdx := 0
  24. if userLen > 1 {
  25. userIdx = rand.Intn(userLen)
  26. }
  27. user := receiver.Accounts[userIdx]
  28. return receiver.Address, user
  29. }