monitor-player-count/submit.go
2025-07-14 19:35:50 +02:00

50 lines
1 KiB
Go

package main
import (
"bytes"
"encoding/json"
"log"
"net/http"
"sync"
"time"
)
func SubmitLoop(stop chan bool, wg *sync.WaitGroup, queue chan PlayerCount, logger *log.Logger, url string, token string) {
defer wg.Done()
defer logger.Printf("Submit loop exited")
wg.Add(1)
logger.Printf("Submit loop started")
for {
select {
case <-stop:
return
case count := <-queue:
logger.Printf("Submitting player count: %+v", count)
data, err := json.Marshal(&count)
if err != nil {
logger.Printf("Failed marshalling player count: %s", err)
continue
}
req, err := http.NewRequest(http.MethodPut, url, bytes.NewReader(data))
if err != nil {
logger.Printf("Failed to create submit request: %s", err)
continue
}
req.Header.Set("X-Token", token)
res, err := http.DefaultClient.Do(req)
if err != nil {
logger.Printf("Failed to execute submit request: %s", err)
time.Sleep(10 * time.Second)
queue <- count // Put up for retrying
continue
}
res.Body.Close()
}
}
}