96 lines
3.2 KiB
Go
96 lines
3.2 KiB
Go
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...")
|
|
}
|