Voter loop
This commit is contained in:
57
voter.go
Normal file
57
voter.go
Normal file
@@ -0,0 +1,57 @@
|
||||
package elect
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/dchest/uniuri"
|
||||
"github.com/go-resty/resty/v2"
|
||||
)
|
||||
|
||||
type Voter struct {
|
||||
client *resty.Client
|
||||
instanceID string
|
||||
signingKey string
|
||||
update chan<- time.Duration
|
||||
}
|
||||
|
||||
func NewVoter(url string, signingKey string) *Voter {
|
||||
update := make(chan time.Duration) // intentionally 0-capacity
|
||||
|
||||
v := &Voter{
|
||||
client: resty.New().
|
||||
SetBaseURL(url),
|
||||
instanceID: uniuri.New(),
|
||||
signingKey: signingKey,
|
||||
update: update,
|
||||
}
|
||||
|
||||
go v.loop(update)
|
||||
|
||||
return v
|
||||
}
|
||||
|
||||
func (v *Voter) Stop() {
|
||||
close(v.update)
|
||||
}
|
||||
|
||||
func (v *Voter) loop(update <-chan time.Duration) {
|
||||
t := time.NewTicker(5 * time.Second)
|
||||
defer t.Stop()
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-t.C:
|
||||
v.vote()
|
||||
|
||||
case period, ok := <-update:
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
|
||||
t.Reset(period)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (v *Voter) vote() {
|
||||
}
|
||||
Reference in New Issue
Block a user