Spaces:
Configuration error
Configuration error
package p2p | |
import ( | |
"sync" | |
"time" | |
) | |
const ( | |
defaultServicesID = "services" | |
WorkerID = "worker" | |
) | |
type NodeData struct { | |
Name string | |
ID string | |
TunnelAddress string | |
ServiceID string | |
LastSeen time.Time | |
} | |
func (d NodeData) IsOnline() bool { | |
now := time.Now() | |
// if the node was seen in the last 40 seconds, it's online | |
return now.Sub(d.LastSeen) < 40*time.Second | |
} | |
var mu sync.Mutex | |
var nodes = map[string]map[string]NodeData{} | |
func GetAvailableNodes(serviceID string) []NodeData { | |
if serviceID == "" { | |
serviceID = defaultServicesID | |
} | |
mu.Lock() | |
defer mu.Unlock() | |
var availableNodes = []NodeData{} | |
for _, v := range nodes[serviceID] { | |
availableNodes = append(availableNodes, v) | |
} | |
return availableNodes | |
} | |
func GetNode(serviceID, nodeID string) (NodeData, bool) { | |
if serviceID == "" { | |
serviceID = defaultServicesID | |
} | |
mu.Lock() | |
defer mu.Unlock() | |
if _, ok := nodes[serviceID]; !ok { | |
return NodeData{}, false | |
} | |
nd, exists := nodes[serviceID][nodeID] | |
return nd, exists | |
} | |
func AddNode(serviceID string, node NodeData) { | |
if serviceID == "" { | |
serviceID = defaultServicesID | |
} | |
mu.Lock() | |
defer mu.Unlock() | |
if nodes[serviceID] == nil { | |
nodes[serviceID] = map[string]NodeData{} | |
} | |
nodes[serviceID][node.ID] = node | |
} | |