package server import ( "context" "log" "time" "codeberg.org/snonux/gorum/internal/config" "codeberg.org/snonux/gorum/internal/quorum" "codeberg.org/snonux/gorum/internal/vote" ) func Start(ctx context.Context, conf config.Config) { go func() { for { log.Println("Starting server") start(ctx, conf) select { case <-time.After(time.Second): case <-ctx.Done(): return } } }() } func start(ctx context.Context, conf config.Config) { ch := make(chan vote.Vote) quo := make(quorum.Quorum) go func() { for { select { case vote := <-ch: quo.Vote(vote) winner, err := quo.Winner(conf) if err != nil { log.Println(err.Error()) continue } log.Printf("The current leader node is %s", winner) case <-time.After(vote.Expiry): quo.CleanExpired() case <-ctx.Done(): return } } }() if err := tcpServerStart(ctx, conf, ch); err != nil { panic(err) } }