This repository has been archived on 2026-10-31. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
Ananta-ps/cmd/ananta-server/main.go
T

94 lines
3.1 KiB
Go

package main
import (
"flag"
"fmt"
"log"
"os"
"os/signal"
"syscall"
"ananta-ps/internal/config"
"ananta-ps/pkg/protocol"
"ananta-ps/internal/gameserver"
"ananta-ps/internal/gateway"
"ananta-ps/internal/logingate"
"ananta-ps/internal/web"
)
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)
_ = protocol.LoadMethodCatalog("data/client_data/MethodIds.json")
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.Printf("[GATEWAY] Error starting 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...")
}