mirror of
				https://source.quilibrium.com/quilibrium/ceremonyclient.git
				synced 2025-11-04 13:27:27 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			50 lines
		
	
	
		
			1011 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1011 B
		
	
	
	
		
			Go
		
	
	
	
	
	
package swarm
 | 
						|
 | 
						|
import "time"
 | 
						|
 | 
						|
// InstantTimer is a timer that triggers at some instant rather than some duration
 | 
						|
type InstantTimer interface {
 | 
						|
	Reset(d time.Time) bool
 | 
						|
	Stop() bool
 | 
						|
	Ch() <-chan time.Time
 | 
						|
}
 | 
						|
 | 
						|
// Clock is a clock that can create timers that trigger at some
 | 
						|
// instant rather than some duration
 | 
						|
type Clock interface {
 | 
						|
	Now() time.Time
 | 
						|
	Since(t time.Time) time.Duration
 | 
						|
	InstantTimer(when time.Time) InstantTimer
 | 
						|
}
 | 
						|
 | 
						|
type RealTimer struct{ t *time.Timer }
 | 
						|
 | 
						|
var _ InstantTimer = (*RealTimer)(nil)
 | 
						|
 | 
						|
func (t RealTimer) Ch() <-chan time.Time {
 | 
						|
	return t.t.C
 | 
						|
}
 | 
						|
 | 
						|
func (t RealTimer) Reset(d time.Time) bool {
 | 
						|
	return t.t.Reset(time.Until(d))
 | 
						|
}
 | 
						|
 | 
						|
func (t RealTimer) Stop() bool {
 | 
						|
	return t.t.Stop()
 | 
						|
}
 | 
						|
 | 
						|
type RealClock struct{}
 | 
						|
 | 
						|
var _ Clock = RealClock{}
 | 
						|
 | 
						|
func (RealClock) Now() time.Time {
 | 
						|
	return time.Now()
 | 
						|
}
 | 
						|
func (RealClock) Since(t time.Time) time.Duration {
 | 
						|
	return time.Since(t)
 | 
						|
}
 | 
						|
func (RealClock) InstantTimer(when time.Time) InstantTimer {
 | 
						|
	t := time.NewTimer(time.Until(when))
 | 
						|
	return &RealTimer{t}
 | 
						|
}
 |