My implementation of gossip-gloomers - the fly.io distributed systems challenge (https://fly.io/dist-sys/)
at main 64 lines 1.0 kB view raw
1package main 2 3import ( 4 "log" 5 "log/slog" 6 "sync" 7 8 maelstrom "github.com/jepsen-io/maelstrom/demo/go" 9) 10 11func main() { 12 slog.Info("starting server") 13 n := maelstrom.NewNode() 14 15 server := newServer(n) 16 17 if err := server.run(); err != nil { 18 log.Fatal(err) 19 } 20} 21 22type server struct { 23 node *maelstrom.Node 24 25 neighbours *neigbours 26 27 ids []int 28 mu sync.Mutex 29} 30 31func newServer(node *maelstrom.Node) *server { 32 server := server{ 33 node: node, 34 neighbours: &neigbours{}, 35 } 36 node.Handle("echo", server.handleEcho) 37 node.Handle("generate", server.handleGenerate) 38 node.Handle("broadcast", server.handleBroadcast) 39 node.Handle("read", server.handleRead) 40 node.Handle("topology", server.handleTopology) 41 42 return &server 43} 44 45func (s *server) run() error { 46 return s.node.Run() 47} 48 49type neigbours struct { 50 nodes []string 51 mu sync.Mutex 52} 53 54func (n *neigbours) addNeighbours(nodes []string) { 55 n.mu.Lock() 56 defer n.mu.Unlock() 57 n.nodes = nodes 58} 59 60func (n *neigbours) getNeighbours() []string { 61 n.mu.Lock() 62 defer n.mu.Unlock() 63 return n.nodes 64}