fix: recursively resolve sdkserver and gameserver in subfolders, eliminate firefly proxy for GaCy PS
This commit is contained in:
1 parent
5f45841936
commit
054ab83307
4 files changed
+141
-107
No files matched your search
@@ -9,14 +9,20 @@ export async function CheckUpdateServer(
|
||||
serverVersion: string
|
||||
): Promise<{ isUpdate: boolean; isExists: boolean; version: string }> {
|
||||
const [ok, latestVersion, error] = await GitService.GetLatestServerVersion()
|
||||
let isExists = await FSService.FileExists(serverPath)
|
||||
let isExists = false
|
||||
|
||||
if (!isExists) {
|
||||
const [gameServer] = await GitService.FindServerExecutables()
|
||||
if (gameServer) {
|
||||
useSettingStore.getState().setServerPath(gameServer)
|
||||
isExists = true
|
||||
}
|
||||
const [gameServer, sdkServer] = await GitService.FindServerExecutables()
|
||||
if (gameServer) {
|
||||
useSettingStore.getState().setServerPath(gameServer)
|
||||
isExists = true
|
||||
}
|
||||
if (sdkServer) {
|
||||
useSettingStore.getState().setSdkServerPath(sdkServer)
|
||||
isExists = true
|
||||
}
|
||||
|
||||
if (!isExists && serverPath) {
|
||||
isExists = await FSService.FileExists(serverPath)
|
||||
}
|
||||
|
||||
if (!ok) {
|
||||
@@ -39,7 +45,9 @@ export async function UpdateServer(serverVersion: string) : Promise<void> {
|
||||
const [gameServer, sdkServer] = await GitService.FindServerExecutables()
|
||||
setDownloadType("Download server successfully")
|
||||
setServerVersion(serverVersion)
|
||||
setServerPath(gameServer || "./server/gameserver-go.exe")
|
||||
if (gameServer) {
|
||||
setServerPath(gameServer)
|
||||
}
|
||||
if (sdkServer) {
|
||||
setSdkServerPath(sdkServer)
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ import useModalStore from '@/stores/modalStore';
|
||||
import useLauncherStore from '@/stores/launcherStore';
|
||||
import { motion } from 'motion/react';
|
||||
import { Link } from '@tanstack/react-router';
|
||||
import { CheckUpdateLauncher, CheckUpdateProxy, CheckUpdateServer, sleep, UpdateLauncher, UpdateProxy, UpdateServer } from '@/helper';
|
||||
import { CheckUpdateLauncher, CheckUpdateServer, sleep, UpdateLauncher, UpdateProxy, UpdateServer } from '@/helper';
|
||||
import UpdateModal from '@/components/updateModal';
|
||||
import { BackgroundSelector } from '@/components/backgroudModal';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
@@ -25,11 +25,9 @@ export default function LauncherPage() {
|
||||
setServerPath,
|
||||
sdkServerPath,
|
||||
setSdkServerPath,
|
||||
proxyPath,
|
||||
gameDir,
|
||||
gameDir,
|
||||
serverVersion,
|
||||
proxyVersion,
|
||||
background,
|
||||
background,
|
||||
selectedServer,
|
||||
setSelectedServer
|
||||
} = useSettingStore()
|
||||
@@ -48,8 +46,7 @@ export default function LauncherPage() {
|
||||
downloadType,
|
||||
isDownloading,
|
||||
serverRunning,
|
||||
proxyRunning,
|
||||
gameRunning,
|
||||
gameRunning,
|
||||
progressDownload,
|
||||
downloadSpeed,
|
||||
updateData,
|
||||
@@ -60,8 +57,7 @@ export default function LauncherPage() {
|
||||
setProxyReady,
|
||||
setIsDownloading,
|
||||
setServerRunning,
|
||||
setProxyRunning,
|
||||
setGameRunning,
|
||||
setGameRunning,
|
||||
setUpdateData,
|
||||
} = useLauncherStore()
|
||||
|
||||
@@ -88,31 +84,25 @@ export default function LauncherPage() {
|
||||
|
||||
useEffect(() => {
|
||||
const check = async () => {
|
||||
if (!serverVersion || !proxyVersion) {
|
||||
setServerReady(false)
|
||||
setProxyReady(false)
|
||||
return
|
||||
const [gameServer, sdkServer] = await GitService.FindServerExecutables()
|
||||
let serverExists = false
|
||||
if (gameServer) {
|
||||
setServerPath(gameServer)
|
||||
serverExists = true
|
||||
}
|
||||
|
||||
let serverExists = await FSService.FileExists(serverPath)
|
||||
if (!serverExists) {
|
||||
const [gameServer, sdkServer] = await GitService.FindServerExecutables()
|
||||
if (gameServer) {
|
||||
setServerPath(gameServer)
|
||||
serverExists = true
|
||||
}
|
||||
if (sdkServer) {
|
||||
setSdkServerPath(sdkServer)
|
||||
}
|
||||
if (sdkServer) {
|
||||
setSdkServerPath(sdkServer)
|
||||
serverExists = true
|
||||
}
|
||||
if (!serverExists && serverPath) {
|
||||
serverExists = await FSService.FileExists(serverPath)
|
||||
}
|
||||
|
||||
const proxyExists = await FSService.FileExists(proxyPath)
|
||||
setServerReady(serverExists)
|
||||
setProxyReady(proxyExists)
|
||||
setProxyReady(true)
|
||||
}
|
||||
|
||||
check()
|
||||
}, [serverPath, proxyPath, serverVersion, proxyVersion])
|
||||
}, [serverPath, serverVersion])
|
||||
|
||||
useEffect(() => {
|
||||
const checkStartUp = async (): Promise<void> => {
|
||||
@@ -122,34 +112,30 @@ export default function LauncherPage() {
|
||||
if (launcherData.isUpdate) {
|
||||
setUpdateData({
|
||||
server: { isUpdate: false, isExists: false, version: "" },
|
||||
proxy: { isUpdate: false, isExists: false, version: "" },
|
||||
proxy: { isUpdate: false, isExists: true, version: "" },
|
||||
launcher: launcherData
|
||||
})
|
||||
setIsOpenSelfUpdateModal(true)
|
||||
return
|
||||
}
|
||||
const serverData = await CheckUpdateServer(serverPath, serverVersion)
|
||||
const proxyData = await CheckUpdateProxy(proxyPath, proxyVersion)
|
||||
setUpdateData({
|
||||
setUpdateData({
|
||||
server: serverData,
|
||||
proxy: proxyData,
|
||||
proxy: { isUpdate: false, isExists: true, version: "" },
|
||||
launcher: launcherData
|
||||
})
|
||||
|
||||
if (!serverData.isExists || !proxyData.isExists) {
|
||||
if (!serverData.isExists) {
|
||||
setServerReady(false)
|
||||
setProxyReady(false)
|
||||
return
|
||||
}
|
||||
|
||||
if (serverData.isUpdate || proxyData.isUpdate) {
|
||||
if (serverData.isUpdate) {
|
||||
setServerReady(true)
|
||||
setProxyReady(true)
|
||||
setIsOpenUpdateDataModal(true)
|
||||
return
|
||||
}
|
||||
setServerReady(true)
|
||||
setProxyReady(true)
|
||||
}
|
||||
checkStartUp()
|
||||
}, []);
|
||||
@@ -188,7 +174,7 @@ export default function LauncherPage() {
|
||||
}
|
||||
|
||||
const handleStartGame = async () => {
|
||||
await FSService.LogMessage("INFO", "handleStartGame initiated: selectedServer=" + selectedServer + ", gamePath=" + gamePath + ", serverPath=" + serverPath + ", proxyPath=" + proxyPath)
|
||||
await FSService.LogMessage("INFO", "handleStartGame initiated: selectedServer=" + selectedServer + ", gamePath=" + gamePath + ", serverPath=" + serverPath)
|
||||
if (!gamePath) {
|
||||
await FSService.LogMessage("WARN", "handleStartGame aborted: gamePath is empty")
|
||||
toast.info("Please select the game executable first")
|
||||
@@ -205,46 +191,33 @@ export default function LauncherPage() {
|
||||
await FSService.LogMessage("INFO", "handleStartGame: querying GaCy PS server executables...")
|
||||
const [gameServer, sdkServer] = await GitService.FindServerExecutables()
|
||||
const activeServer = gameServer || serverPath
|
||||
await FSService.LogMessage("INFO", "handleStartGame: found gameServer=" + gameServer + ", sdkServer=" + sdkServer + ", activeServer=" + activeServer)
|
||||
const activeSdk = sdkServer || sdkServerPath
|
||||
await FSService.LogMessage("INFO", "handleStartGame: found gameServer=" + gameServer + ", sdkServer=" + sdkServer + ", activeServer=" + activeServer + ", activeSdk=" + activeSdk)
|
||||
|
||||
if (!activeServer) {
|
||||
await FSService.LogMessage("ERROR", "handleStartGame: activeServer missing. Opening download modal.")
|
||||
if (!activeServer && !activeSdk) {
|
||||
await FSService.LogMessage("ERROR", "handleStartGame: neither gameServer nor sdkServer found. Opening download modal.")
|
||||
toast.error("Please download GaCy PS server files first")
|
||||
setIsOpenDownloadDataModal(true)
|
||||
return
|
||||
}
|
||||
|
||||
// 1. Start Proxy
|
||||
const activeProxy = proxyPath || "./proxy/firefly-go-proxy.exe"
|
||||
await FSService.LogMessage("INFO", "handleStartGame: activeProxy=" + activeProxy + ", proxyRunning=" + proxyRunning)
|
||||
if (!proxyRunning && !gamePath.endsWith("launcher.exe")) {
|
||||
await FSService.LogMessage("INFO", "handleStartGame: starting proxy via StartWithConsole(" + activeProxy + ")")
|
||||
const [resultProxy, error] = await FSService.StartWithConsole(activeProxy)
|
||||
if (!resultProxy) {
|
||||
await FSService.LogMessage("ERROR", "handleStartGame: proxy start failed: " + error)
|
||||
toast.error(t("home.toast_start_proxy_failed") + ": " + error)
|
||||
return
|
||||
}
|
||||
await FSService.LogMessage("INFO", "handleStartGame: proxy started successfully")
|
||||
setProxyRunning(true)
|
||||
}
|
||||
await sleep(500)
|
||||
|
||||
// 2. Start SDK Server if exists
|
||||
const activeSdk = sdkServer || sdkServerPath
|
||||
// 1. Start SDK Server first (handles dispatch & login)
|
||||
if (activeSdk) {
|
||||
await FSService.LogMessage("INFO", "handleStartGame: starting SDK server via StartWithConsole(" + activeSdk + ")")
|
||||
await FSService.LogMessage("INFO", "handleStartGame: starting SDK Server via StartWithConsole(" + activeSdk + ")")
|
||||
const [resultSdk, sdkErr] = await FSService.StartWithConsole(activeSdk)
|
||||
if (!resultSdk) {
|
||||
await FSService.LogMessage("WARN", "handleStartGame: SDK server start warning: " + sdkErr)
|
||||
} else {
|
||||
await FSService.LogMessage("INFO", "handleStartGame: SDK server started successfully")
|
||||
await FSService.LogMessage("ERROR", "handleStartGame: SDK server start failed: " + sdkErr)
|
||||
toast.error("Failed to start SDK Server: " + sdkErr)
|
||||
return
|
||||
}
|
||||
await sleep(400)
|
||||
await FSService.LogMessage("INFO", "handleStartGame: SDK server started successfully")
|
||||
await sleep(800)
|
||||
} else {
|
||||
await FSService.LogMessage("WARN", "handleStartGame: activeSdk not found! Proceeding with gameServer only.")
|
||||
}
|
||||
|
||||
// 3. Start Game Server
|
||||
if (!serverRunning) {
|
||||
// 2. Start Game Server second
|
||||
if (activeServer && !serverRunning) {
|
||||
await FSService.LogMessage("INFO", "handleStartGame: starting Game server via StartWithConsole(" + activeServer + ")")
|
||||
const [resultServer, error] = await FSService.StartWithConsole(activeServer)
|
||||
if (!resultServer) {
|
||||
@@ -254,10 +227,10 @@ export default function LauncherPage() {
|
||||
}
|
||||
await FSService.LogMessage("INFO", "handleStartGame: Game server started successfully")
|
||||
setServerRunning(true)
|
||||
await sleep(1000)
|
||||
}
|
||||
await sleep(1000)
|
||||
} else {
|
||||
await FSService.LogMessage("INFO", "handleStartGame: running in Official Server mode (no proxy/PS)")
|
||||
await FSService.LogMessage("INFO", "handleStartGame: running in Official Server mode (no PS)")
|
||||
}
|
||||
|
||||
// 4. Start Game
|
||||
@@ -473,18 +446,17 @@ export default function LauncherPage() {
|
||||
<button
|
||||
onClick={async () => {
|
||||
const serverData = await CheckUpdateServer(serverPath, serverVersion)
|
||||
const proxyData = await CheckUpdateProxy(proxyPath, proxyVersion)
|
||||
setUpdateData({
|
||||
server: serverData,
|
||||
proxy: proxyData,
|
||||
proxy: { isUpdate: false, isExists: true, version: "" },
|
||||
launcher: updateData.launcher
|
||||
})
|
||||
|
||||
if (!serverData.isExists || !proxyData.isExists) {
|
||||
if (!serverData.isExists) {
|
||||
setIsOpenDownloadDataModal(true)
|
||||
return
|
||||
}
|
||||
if (serverData.isUpdate || proxyData.isUpdate) {
|
||||
if (serverData.isUpdate) {
|
||||
setIsOpenUpdateDataModal(true)
|
||||
return
|
||||
}
|
||||
@@ -501,14 +473,6 @@ export default function LauncherPage() {
|
||||
{t("home.menu_open_server")}
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button onClick={() => {
|
||||
FSService.OpenFolder("./proxy")
|
||||
}}
|
||||
>
|
||||
{t("home.menu_open_proxy")}
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button disabled={!gameDir} onClick={() => {
|
||||
if (gameDir) {
|
||||
@@ -546,9 +510,7 @@ export default function LauncherPage() {
|
||||
|
||||
{/* Downloading Progress Bar */}
|
||||
{isDownloading && (
|
||||
updateData.proxy.isUpdate
|
||||
|| updateData.server.isUpdate
|
||||
|| !updateData.proxy.isExists
|
||||
updateData.server.isUpdate
|
||||
|| !updateData.server.isExists
|
||||
) && (
|
||||
<div className="fixed bottom-4 left-1/2 transform -translate-x-1/2 z-10 w-[60vw] bg-black/60 backdrop-blur-md rounded-2xl p-4 shadow-2xl border border-white/10">
|
||||
|
||||
Reference in new issue
Block a user