mirror of
https://github.com/superseriousbusiness/gotosocial
synced 2024-11-23 12:53:23 +00:00
35 lines
750 B
Go
35 lines
750 B
Go
package backoff
|
|
|
|
import "time"
|
|
|
|
type Timer interface {
|
|
Start(duration time.Duration)
|
|
Stop()
|
|
C() <-chan time.Time
|
|
}
|
|
|
|
// defaultTimer implements Timer interface using time.Timer
|
|
type defaultTimer struct {
|
|
timer *time.Timer
|
|
}
|
|
|
|
// C returns the timers channel which receives the current time when the timer fires.
|
|
func (t *defaultTimer) C() <-chan time.Time {
|
|
return t.timer.C
|
|
}
|
|
|
|
// Start starts the timer to fire after the given duration
|
|
func (t *defaultTimer) Start(duration time.Duration) {
|
|
if t.timer == nil {
|
|
t.timer = time.NewTimer(duration)
|
|
} else {
|
|
t.timer.Reset(duration)
|
|
}
|
|
}
|
|
|
|
// Stop is called when the timer is not used anymore and resources may be freed.
|
|
func (t *defaultTimer) Stop() {
|
|
if t.timer != nil {
|
|
t.timer.Stop()
|
|
}
|
|
}
|