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

53 lines
913 B
Go

package main
import (
"log"
"regexp"
"sync"
"time"
"git.1e99.eu/1e99/2b2t/models"
)
var (
playerRegex = regexp.MustCompile(`^(.+): (\d+)$`)
)
type Poller interface {
PollPlayerCount() (models.PlayerCount, error)
String() string
}
func PollLoop(stop chan bool, wg *sync.WaitGroup, queue chan models.PlayerCount, logger *log.Logger, poller Poller) {
defer wg.Done()
defer logger.Printf("Poll loop exited")
wg.Add(1)
logger.Printf("Poll loop started")
var lastPoll int64 = 0
for {
select {
case <-stop:
return
default:
now := time.Now().Unix() / 60
if lastPoll == now {
continue
}
count, err := poller.PollPlayerCount()
if err != nil {
logger.Printf("Failed polling player count: %s", err)
continue
}
// Convert seconds into minutes
count.Time = now
lastPoll = now
logger.Printf("Polled player count: %+v", count)
queue <- count
}
}
}