Files
HexDeck/backend/main.go

64 lines
1.3 KiB
Go

package main
import (
"embed"
"fmt"
"log"
"log/slog"
"os"
"strconv"
"time"
"github.com/HexCardGames/HexDeck/api"
"github.com/HexCardGames/HexDeck/db"
"github.com/HexCardGames/HexDeck/game"
"github.com/HexCardGames/HexDeck/utils"
"github.com/gin-gonic/gin"
)
//go:embed all:public/*
var public embed.FS
func main() {
logHandler := slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{
Level: slog.LevelDebug,
})
slog.SetDefault(slog.New(logHandler))
mongoUri := utils.Getenv("MONGO_URI", "")
if mongoUri == "" {
slog.Error("MONGO_URI environment variable not set!")
return
}
ok := db.InitDB(mongoUri)
if !ok {
slog.Error("Initializing MongoDB database failed")
return
}
game.LoadRooms()
roomTicker := time.NewTicker(1 * time.Second)
go func() {
for {
select {
case <-roomTicker.C:
game.TickRooms(1000)
}
}
}()
server := gin.Default()
server.SetTrustedProxies(nil)
api.RegisterApi(server)
server.Use(api.SPAMiddleware(public, "public", "/"))
listenHost := utils.Getenv("LISTEN_HOST", "0.0.0.0")
listenPort, err := strconv.Atoi(utils.Getenv("LISTEN_PORT", "3000"))
if err != nil {
log.Fatal("Value of variable PORT is not a valid integer!")
}
slog.Info(fmt.Sprintf("HexDeck server listening on http://%s:%d", listenHost, listenPort))
server.Run(fmt.Sprintf("%s:%d", listenHost, listenPort))
}