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 | |
| } | |