safing-portmaster/spn/captain/gossip.go

38 lines
683 B
Go

package captain
import (
"sync"
)
var (
gossipOps = make(map[string]*GossipOp)
gossipOpsLock sync.RWMutex
)
func registerGossipOp(craneID string, op *GossipOp) {
gossipOpsLock.Lock()
defer gossipOpsLock.Unlock()
gossipOps[craneID] = op
}
func deleteGossipOp(craneID string) {
gossipOpsLock.Lock()
defer gossipOpsLock.Unlock()
delete(gossipOps, craneID)
}
func gossipRelayMsg(receivedFrom string, msgType GossipMsgType, data []byte) {
gossipOpsLock.RLock()
defer gossipOpsLock.RUnlock()
for craneID, gossipOp := range gossipOps {
// Don't return same msg back to sender.
if craneID == receivedFrom {
continue
}
gossipOp.sendMsg(msgType, data)
}
}