|  | @@ -3,10 +3,27 @@ package receiver
 | 
	
		
			
				|  |  |  import (
 | 
	
		
			
				|  |  |  	"net"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	"time"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	v2net "v2ray.com/core/common/net"
 | 
	
		
			
				|  |  |  	"v2ray.com/core/proxy"
 | 
	
		
			
				|  |  |  )
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  type refresher struct {
 | 
	
		
			
				|  |  | +	strategy   *AllocationStrategy
 | 
	
		
			
				|  |  | +	portsInUse []v2net.Port
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +func (r *refresher) Refresh(s *StreamReceiver) {
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +func (r *refresher) Interval() time.Duration {
 | 
	
		
			
				|  |  | +	switch r.strategy.Type {
 | 
	
		
			
				|  |  | +	case AllocationStrategy_Random:
 | 
	
		
			
				|  |  | +		return time.Minute * time.Duration(r.strategy.GetRefreshValue())
 | 
	
		
			
				|  |  | +	default:
 | 
	
		
			
				|  |  | +		return 0
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  type StreamReceiver struct {
 | 
	
	
		
			
				|  | @@ -14,8 +31,20 @@ type StreamReceiver struct {
 | 
	
		
			
				|  |  |  	proxy  *proxy.InboundHandler
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	listeners []net.Listener
 | 
	
		
			
				|  |  | +	refresher refresher
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -func (r *StreamReceiver) Start() {
 | 
	
		
			
				|  |  | +func (s *StreamReceiver) Start() {
 | 
	
		
			
				|  |  | +	s.refresher.Refresh(s)
 | 
	
		
			
				|  |  | +	interval := s.refresher.Interval()
 | 
	
		
			
				|  |  | +	if interval == 0 {
 | 
	
		
			
				|  |  | +		return
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	go func() {
 | 
	
		
			
				|  |  | +		for {
 | 
	
		
			
				|  |  | +			time.Sleep(s.refresher.Interval())
 | 
	
		
			
				|  |  | +			s.refresher.Refresh(s)
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}()
 | 
	
		
			
				|  |  |  }
 |