HFish/core/protocol/tftp/libs/backoff.go

36 lines
489 B
Go
Raw Normal View History

2019-10-28 22:25:23 +08:00
package libs
import (
"math/rand"
"time"
)
const (
defaultTimeout = 5 * time.Second
defaultRetries = 5
)
type backoffFunc func(int) time.Duration
type backoff struct {
attempt int
handler backoffFunc
}
func (b *backoff) reset() {
b.attempt = 0
}
func (b *backoff) count() int {
return b.attempt
}
func (b *backoff) backoff() {
if b.handler == nil {
time.Sleep(time.Duration(rand.Int63n(int64(time.Second))))
} else {
time.Sleep(b.handler(b.attempt))
}
b.attempt++
}