Replace log.Printf/Println with slog.Info/Error/Warn across the codebase. Initialize slog with JSON handler in main.go. Add panic recovery defer in SSH session handler. Add structured game event logging (room created, player joined, game started, game over, player inactive removed). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"log/slog"
|
|
"os"
|
|
|
|
"github.com/tolelom/catacombs/config"
|
|
"github.com/tolelom/catacombs/game"
|
|
"github.com/tolelom/catacombs/server"
|
|
"github.com/tolelom/catacombs/store"
|
|
"github.com/tolelom/catacombs/web"
|
|
)
|
|
|
|
func main() {
|
|
os.MkdirAll("data", 0755)
|
|
|
|
logger := slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{
|
|
Level: slog.LevelInfo,
|
|
}))
|
|
slog.SetDefault(logger)
|
|
|
|
cfg, err := config.Load("config.yaml")
|
|
if err != nil {
|
|
if os.IsNotExist(err) {
|
|
cfg, _ = config.Load("")
|
|
} else {
|
|
log.Fatalf("Failed to load config: %v", err)
|
|
}
|
|
}
|
|
|
|
db, err := store.Open("data/catacombs.db")
|
|
if err != nil {
|
|
log.Fatalf("Failed to open database: %v", err)
|
|
}
|
|
defer db.Close()
|
|
|
|
lobby := game.NewLobby(cfg)
|
|
|
|
sshAddr := fmt.Sprintf("0.0.0.0:%d", cfg.Server.SSHPort)
|
|
webAddr := fmt.Sprintf(":%d", cfg.Server.HTTPPort)
|
|
|
|
// Start web terminal server in background
|
|
go func() {
|
|
if err := web.Start(webAddr, cfg.Server.SSHPort); err != nil {
|
|
slog.Error("web server error", "error", err)
|
|
}
|
|
}()
|
|
|
|
slog.Info("server starting", "ssh_port", cfg.Server.SSHPort, "http_port", cfg.Server.HTTPPort)
|
|
if err := server.Start(sshAddr, lobby, db); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|