package beacon import ( "bytes" "encoding/json" "log" "net/http" "time" "git.send.nrw/sendnrw/decent-websrv/internal/mesh" ) type Client struct { URL, Token string HTTP *http.Client } func (c *Client) LoopRegister(n mesh.NodeInfo) { go func() { for { c.register(n) time.Sleep(30 * time.Second) } }() } func (c *Client) register(n mesh.NodeInfo) { b, _ := json.Marshal(RegisterReq{BaseURL: n.PublicURL, MeshURL: n.MeshURL, NodeID: n.NodeID, TTL: 45}) req, _ := http.NewRequest(http.MethodPost, c.URL+"/_beacon/register", bytes.NewReader(b)) req.Header.Set("Content-Type", "application/json") if c.Token != "" { req.Header.Set("X-Beacon-Token", c.Token) } resp, err := c.HTTP.Do(req) if err != nil { log.Println("beacon register:", err) return } resp.Body.Close() } func (c *Client) PollPeers() []mesh.NodeInfo { req, _ := http.NewRequest(http.MethodGet, c.URL+"/_beacon/peers", nil) if c.Token != "" { req.Header.Set("X-Beacon-Token", c.Token) } resp, err := c.HTTP.Do(req) if err != nil { return nil } defer resp.Body.Close() var out PeersResp _ = json.NewDecoder(resp.Body).Decode(&out) return out.Peers }