2b2t-queue-tracker/worker/submit.go
2025-06-29 11:20:23 +02:00

52 lines
1.1 KiB
Go

package main
import (
"bytes"
"encoding/json"
"log"
"net/http"
"sync"
"time"
"git.1e99.eu/1e99/2b2t/models"
)
func SubmitLoop(stop chan bool, wg *sync.WaitGroup, queue chan models.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()
}
}
}