From 9eb5ab1818b6b19501fd7209db1987c9e06cc919 Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Tue, 9 Jun 2026 05:59:20 -0400 Subject: first commit --- cmd/mud/main.go | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 cmd/mud/main.go (limited to 'cmd/mud') diff --git a/cmd/mud/main.go b/cmd/mud/main.go new file mode 100644 index 0000000..d04bd9b --- /dev/null +++ b/cmd/mud/main.go @@ -0,0 +1,61 @@ +package main + +import ( + "fmt" + "log" + "os" + "os/signal" + "strconv" + "syscall" + + "thirdcollapse/internal/game" + "thirdcollapse/internal/net" +) + +func main() { + dataDir := os.Getenv("DATA_DIR") + if dataDir == "" { + dataDir = "data" + } + + port := 4000 + if len(os.Args) > 1 { + if p, err := strconv.Atoi(os.Args[1]); err == nil && p >= 1 && p <= 65535 { + port = p + } else { + log.Fatalf("invalid port: %s (must be 1-65535)", os.Args[1]) + } + } + + g := game.New(dataDir) + g.Ticks.Start() + defer g.Ticks.Stop() + + g.Ticks.Subscribe(1, func() bool { + g.World.Tick() + return true + }) + + addr := fmt.Sprintf(":%d", port) + server, err := net.NewServer(addr) + if err != nil { + log.Fatalf("failed to start server: %v", err) + } + g.SetHub(server.Hub()) + + log.Printf("Third Collapse listening on :%d", port) + + sigCh := make(chan os.Signal, 1) + signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM) + + go func() { + <-sigCh + log.Println("Shutting down...") + g.Ticks.Stop() + os.Exit(0) + }() + + if err := server.ListenAndServe(g.HandleSession); err != nil { + log.Fatalf("server error: %v", err) + } +} -- cgit v1.2.3