| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 | 
							- package protocol
 
- import (
 
- 	"sync"
 
- 	"time"
 
- 	"github.com/v2ray/v2ray-core/common/dice"
 
- 	v2net "github.com/v2ray/v2ray-core/common/net"
 
- )
 
- type ServerSpec struct {
 
- 	sync.RWMutex
 
- 	Destination v2net.Destination
 
- 	users []*User
 
- }
 
- func NewServerSpec(dest v2net.Destination, users ...*User) *ServerSpec {
 
- 	return &ServerSpec{
 
- 		Destination: dest,
 
- 		users:       users,
 
- 	}
 
- }
 
- func (this *ServerSpec) HasUser(user *User) bool {
 
- 	this.RLock()
 
- 	defer this.RUnlock()
 
- 	account := user.Account
 
- 	for _, u := range this.users {
 
- 		if u.Account.Equals(account) {
 
- 			return true
 
- 		}
 
- 	}
 
- 	return false
 
- }
 
- func (this *ServerSpec) AddUser(user *User) {
 
- 	if this.HasUser(user) {
 
- 		return
 
- 	}
 
- 	this.Lock()
 
- 	defer this.Unlock()
 
- 	this.users = append(this.users, user)
 
- }
 
- func (this *ServerSpec) PickUser() *User {
 
- 	userCount := len(this.users)
 
- 	return this.users[dice.Roll(userCount)]
 
- }
 
- func (this *ServerSpec) IsValid() bool {
 
- 	return true
 
- }
 
- func (this *ServerSpec) SetValid(b bool) {
 
- }
 
- type TimeoutServerSpec struct {
 
- 	*ServerSpec
 
- 	until time.Time
 
- }
 
- func NewTimeoutServerSpec(spec *ServerSpec, until time.Time) *TimeoutServerSpec {
 
- 	return &TimeoutServerSpec{
 
- 		ServerSpec: spec,
 
- 		until:      until,
 
- 	}
 
- }
 
- func (this *TimeoutServerSpec) IsValid() bool {
 
- 	return this.until.Before(time.Now())
 
- }
 
- func (this *TimeoutServerSpec) SetValid(b bool) {
 
- 	if !b {
 
- 		this.until = time.Time{}
 
- 	}
 
- }
 
 
  |