summaryrefslogtreecommitdiff
path: root/internal/server/server.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/server/server.go')
-rw-r--r--internal/server/server.go39
1 files changed, 39 insertions, 0 deletions
diff --git a/internal/server/server.go b/internal/server/server.go
new file mode 100644
index 0000000..55d7c9a
--- /dev/null
+++ b/internal/server/server.go
@@ -0,0 +1,39 @@
+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) {
+ 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)
+ }
+}