package main import ( "flag" "fmt" "log" "os" "os/signal" "syscall" "ananta-ps/internal/config" "ananta-ps/internal/gameserver" "ananta-ps/internal/gateway" "ananta-ps/internal/logingate" "ananta-ps/internal/web" "ananta-ps/pkg/protocol" ) const banner = ` ===================================================================== _ _ ____ ____ / \ _ __ __ _ _ __ _ _ _| |_ __ _ | _ \ / ___| / _ \ | '_ \ / _` + "`" + ` | '_ \| |_| | _/ _` + "`" + ` | | |_) |\___ \ / ___ \| | | | (_| | | | | _ | || (_| | | __/ ___) | /_/ \_\_| |_|\__,_|_| |_|_| |_|\__\__,_| |_| |____/ (Native Go Engine) ===================================================================== ` func main() { configPath := flag.String("config", "config/private-server.json", "Path to private-server.json") flag.Parse() fmt.Print(banner) cfg, err := config.LoadConfig(*configPath) if err := protocol.LoadMethodCatalog("data/client_data/MethodIds.json"); err != nil { log.Printf("[PROTOCOL] Using compiled method catalog: %v", err) } if err != nil { log.Fatalf("[FATAL] Could not load configuration: %v", err) } log.Printf("[INIT] Client Version: %d | Server ID: %d | Aid: %d", cfg.Client.Version, cfg.Client.ServerID, cfg.Client.Aid) log.Printf("[INIT] Player Profile: PID=%d | Account=%s | InitialUnit=%d", cfg.Player.Pid, cfg.Player.AccountId, cfg.Player.InitialUnitId) // 1. Start Gateway (Port 443, 80, 5801) gw := gateway.New(cfg, "", "") if err := gw.Start(); err != nil { log.Fatalf("[GATEWAY] Failed to start gateway: %v", err) } defer gw.Stop() // 2. Start Login Gate Server (Port 5200, 5201) loginSrv := logingate.New(cfg) if err := loginSrv.Start(); err != nil { log.Fatalf("[LOGIN-GATE] Failed to start login gate: %v", err) } defer loginSrv.Stop() // 3. Start Game Server (Port 5202) gameSrv := gameserver.New(cfg, "") if err := gameSrv.Start(); err != nil { log.Fatalf("[GAME-SERVER] Failed to start game server: %v", err) } defer gameSrv.Stop() // 4. Start Admin GM Web Panel (Port 17888) adminSrv := web.NewAdmin(cfg, gameSrv) if err := adminSrv.Start(); err != nil { log.Printf("[ADMIN-GM] Warning: admin server error: %v", err) } defer adminSrv.Stop() // 5. Start Debug WebUI (Port 5809) debugSrv := web.NewDebug(cfg, gameSrv) if err := debugSrv.Start(); err != nil { log.Printf("[DEBUG-API] Warning: debug server error: %v", err) } defer debugSrv.Stop() log.Println("[READY] Ananta Private Server is fully operational!") log.Printf("[READY] Gateway: HTTPS=443, HTTP=80, Mobile/LoginList=%d", cfg.Network.Proxy.LoginListPort) log.Printf("[READY] Game Ports: Login=%v, Game=%d", cfg.Network.LoginPorts, cfg.Network.GamePort) log.Printf("[READY] GM Admin Panel: http://%s:%d/", cfg.Network.AdvertisedHost, cfg.Admin.Port) log.Printf("[READY] Debug WebUI: http://%s:5809/", cfg.Network.AdvertisedHost) log.Println("[INFO] Press Ctrl+C to stop the server.") // Wait for termination signal sigChan := make(chan os.Signal, 1) signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM) <-sigChan log.Println("[SHUTDOWN] Stopping all Ananta Private Server services...") }