1
0
Fork 0
mirror of https://git.rwth-aachen.de/acs/public/villas/node/ synced 2025-03-30 00:00:11 +01:00
VILLASnode/go/pkg/nodes/webrtc/backoff.go

40 lines
889 B
Go

/** Exponential backoffs for reconnect timing.
*
* @author Steffen Vogel <svogel2@eonerc.rwth-aachen.de>
* @copyright 2014-2022, Institute for Automation of Complex Power Systems, EONERC
* @license Apache 2.0
*********************************************************************************/
package webrtc
import "time"
var (
DefaultExponentialBackoff = ExponentialBackoff{
Factor: 1.5,
Maximum: 1 * time.Minute,
Initial: 1 * time.Second,
Duration: 1 * time.Second,
}
)
type ExponentialBackoff struct {
Factor float32
Maximum time.Duration
Initial time.Duration
Duration time.Duration
}
func (e *ExponentialBackoff) Next() time.Duration {
e.Duration = time.Duration(1.5 * float32(e.Duration)).Round(time.Second)
if e.Duration > e.Maximum {
e.Duration = e.Maximum
}
return e.Duration
}
func (e *ExponentialBackoff) Reset() {
e.Duration = e.Initial
}