mirror of
				https://github.com/v2fly/v2ray-core.git
				synced 2025-11-03 19:29:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			60 lines
		
	
	
		
			718 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			718 B
		
	
	
	
		
			Go
		
	
	
	
	
	
package core
 | 
						|
 | 
						|
import (
 | 
						|
	"sync"
 | 
						|
	"time"
 | 
						|
)
 | 
						|
 | 
						|
// Clock is a V2Ray feature that returns current time.
 | 
						|
type Clock interface {
 | 
						|
	Feature
 | 
						|
 | 
						|
	// Now returns current time.
 | 
						|
	Now() time.Time
 | 
						|
}
 | 
						|
 | 
						|
type syncClock struct {
 | 
						|
	sync.RWMutex
 | 
						|
	Clock
 | 
						|
}
 | 
						|
 | 
						|
func (c *syncClock) Now() time.Time {
 | 
						|
	c.RLock()
 | 
						|
	defer c.RUnlock()
 | 
						|
 | 
						|
	if c.Clock == nil {
 | 
						|
		return time.Now()
 | 
						|
	}
 | 
						|
 | 
						|
	return c.Clock.Now()
 | 
						|
}
 | 
						|
 | 
						|
func (c *syncClock) Start() error {
 | 
						|
	c.RLock()
 | 
						|
	defer c.RUnlock()
 | 
						|
 | 
						|
	if c.Clock == nil {
 | 
						|
		return nil
 | 
						|
	}
 | 
						|
 | 
						|
	return c.Clock.Start()
 | 
						|
}
 | 
						|
 | 
						|
func (c *syncClock) Close() error {
 | 
						|
	c.RLock()
 | 
						|
	defer c.RUnlock()
 | 
						|
 | 
						|
	if c.Clock == nil {
 | 
						|
		return nil
 | 
						|
	}
 | 
						|
 | 
						|
	return c.Clock.Close()
 | 
						|
}
 | 
						|
 | 
						|
func (c *syncClock) Set(clock Clock) {
 | 
						|
	c.Lock()
 | 
						|
	defer c.Unlock()
 | 
						|
 | 
						|
	c.Clock = clock
 | 
						|
}
 |