mirror of
https://github.com/superseriousbusiness/gotosocial
synced 2024-12-21 02:03:19 +00:00
36 lines
750 B
Go
36 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()
|
||
|
}
|
||
|
}
|