aboutsummaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
authorhistoria <[not public]>2026-06-09 05:59:20 -0400
committerhistoria <[not public]>2026-06-09 05:59:20 -0400
commit9eb5ab1818b6b19501fd7209db1987c9e06cc919 (patch)
tree76e046b0bf611dfe939a8c8f6507467de2e9e20f /cmd
downloadthehouseoficarus-9eb5ab1818b6b19501fd7209db1987c9e06cc919.tar.gz
first commit
Diffstat (limited to 'cmd')
-rw-r--r--cmd/mud/main.go61
1 files changed, 61 insertions, 0 deletions
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)
+ }
+}