zoreide/orchestrator.go

88 lines
1.6 KiB
Go
Raw Normal View History

2022-07-01 15:46:31 +02:00
package main
import (
"fmt"
"log"
"strconv"
"time"
)
func (mip *AbstractMulticast) WriteNumberToMulticast() {
log.Println("Initiating ticker")
bstNumber := fmt.Sprintf("%d", ZoreideBridge.hIerarchyNumber)
for range time.Tick(1 * time.Second) {
_, err := mip.Wconn.Write([]byte(bstNumber))
if err != nil {
log.Println("Cannot write to multicast:" + err.Error())
}
}
}
func (mip *AbstractMulticast) ReadNumberFromMulticast() {
log.Println("Initiating reader")
buffer := make([]byte, mip.MaxDatagramSize)
// Loop forever reading from the socket
for {
_, _, err := mip.Rconn.ReadFromUDP(buffer)
if err != nil {
log.Println("ReadFromUDP failed:", err)
}
BstChannel <- string(buffer)
}
}
func (b *AbstractBridge) BeTheBeta() {
log.Println("Inizializing Descalator")
ownNumber := b.hIerarchyNumber
for bstNumber := range BstChannel {
brdNumber, err := strconv.ParseInt(bstNumber, 10, 64)
if err != nil {
log.Println("Garbage received on multicast: ", bstNumber)
log.Println("Cannot convert to int64:", err.Error())
continue
}
if brdNumber > ownNumber {
log.Println("GULP! There is a bigger one, better descalating")
b.IsAlpha = false
if b.IsActive {
b.removeIPandBridgeInt()
b.IsActive = false
}
}
}
}
func (b *AbstractBridge) WaitForBeAlpha() {
log.Println("Inizializing Escalator")
for range time.Tick(5 * time.Second) {
if b.IsAlpha && !b.IsActive {
log.Println("I'm the ALPHA! Get out my path, losers!")
b.configureIpAndBridgeUp()
b.IsActive = true
}
b.IsAlpha = true
}
}