receiver.go 809 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  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"
  6. )
  7. type Receiver struct {
  8. Destination v2net.Destination
  9. Accounts []vmess.User
  10. }
  11. type ReceiverManager struct {
  12. receivers []*Receiver
  13. }
  14. func NewReceiverManager(receivers []*Receiver) *ReceiverManager {
  15. return &ReceiverManager{
  16. receivers: receivers,
  17. }
  18. }
  19. func (this *ReceiverManager) PickReceiver() (v2net.Destination, vmess.User) {
  20. receiverLen := len(this.receivers)
  21. receiverIdx := 0
  22. if receiverLen > 1 {
  23. receiverIdx = rand.Intn(receiverLen)
  24. }
  25. receiver := this.receivers[receiverIdx]
  26. userLen := len(receiver.Accounts)
  27. userIdx := 0
  28. if userLen > 1 {
  29. userIdx = rand.Intn(userLen)
  30. }
  31. user := receiver.Accounts[userIdx]
  32. return receiver.Destination, user
  33. }