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
@@ -119,6 +119,7 @@ func (g *GitService) DownloadServerProgress(version string) (bool, string) {
|
||||
return false, fmt.Sprintf("unzip server: %v", err)
|
||||
}
|
||||
os.Remove(saveZipPath)
|
||||
g.organizeExtractedServer(constant.ServerStorageUrl)
|
||||
return true, ""
|
||||
}
|
||||
|
||||
@@ -180,30 +181,84 @@ func (g *GitService) UnzipServer() {
|
||||
_ = os.Remove(zipPath)
|
||||
}
|
||||
}
|
||||
g.organizeExtractedServer(constant.ServerStorageUrl)
|
||||
}
|
||||
|
||||
func (g *GitService) organizeExtractedServer(dest string) {
|
||||
forShipPath := filepath.Join(dest, "for ship")
|
||||
if info, err := os.Stat(forShipPath); err == nil && info.IsDir() {
|
||||
logger.Info("organizeExtractedServer: found 'for ship' subdirectory in %s, synchronizing files", dest)
|
||||
entries, err := os.ReadDir(forShipPath)
|
||||
if err == nil {
|
||||
for _, entry := range entries {
|
||||
src := filepath.Join(forShipPath, entry.Name())
|
||||
dst := filepath.Join(dest, entry.Name())
|
||||
if !entry.IsDir() {
|
||||
if _, err := os.Stat(dst); os.IsNotExist(err) {
|
||||
data, readErr := os.ReadFile(src)
|
||||
if readErr == nil {
|
||||
_ = os.WriteFile(dst, data, 0755)
|
||||
logger.Info("organizeExtractedServer: copied %s -> %s", entry.Name(), dst)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (g *GitService) FindServerExecutables() (string, string) {
|
||||
serverDir := constant.ServerStorageUrl
|
||||
var candidateRoots []string
|
||||
|
||||
if exePath, err := os.Executable(); err == nil {
|
||||
exeDir := filepath.Dir(exePath)
|
||||
candidateRoots = append(candidateRoots, filepath.Join(exeDir, "server"))
|
||||
candidateRoots = append(candidateRoots, filepath.Join(filepath.Dir(exeDir), "server"))
|
||||
}
|
||||
candidateRoots = append(candidateRoots, constant.ServerStorageUrl, "./bin/server", "server", "bin/server")
|
||||
|
||||
var gameServer, sdkServer string
|
||||
seen := make(map[string]bool)
|
||||
|
||||
// Candidate filenames for game server
|
||||
for _, name := range []string{"gameserver-go.exe", "server.exe", "gameserver.exe", "firefly-go_win.exe"} {
|
||||
p := filepath.Join(serverDir, name)
|
||||
if info, err := os.Stat(p); err == nil && !info.IsDir() {
|
||||
gameServer = p
|
||||
for _, root := range candidateRoots {
|
||||
absRoot, err := filepath.Abs(root)
|
||||
if err != nil || seen[absRoot] {
|
||||
continue
|
||||
}
|
||||
seen[absRoot] = true
|
||||
|
||||
if info, err := os.Stat(absRoot); err != nil || !info.IsDir() {
|
||||
continue
|
||||
}
|
||||
|
||||
_ = filepath.Walk(absRoot, func(path string, info os.FileInfo, err error) error {
|
||||
if err != nil || info.IsDir() {
|
||||
return nil
|
||||
}
|
||||
nameLower := strings.ToLower(info.Name())
|
||||
|
||||
// Search SDK server
|
||||
if sdkServer == "" {
|
||||
if nameLower == "sdkserver-go.exe" || nameLower == "sdkserver.exe" || (strings.Contains(nameLower, "sdkserver") && strings.HasSuffix(nameLower, ".exe")) {
|
||||
sdkServer = path
|
||||
}
|
||||
}
|
||||
|
||||
// Search Game server
|
||||
if gameServer == "" {
|
||||
if nameLower == "gameserver-go.exe" || nameLower == "server.exe" || nameLower == "gameserver.exe" || nameLower == "firefly-go_win.exe" || (strings.Contains(nameLower, "gameserver") && strings.HasSuffix(nameLower, ".exe")) {
|
||||
gameServer = path
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
if gameServer != "" && sdkServer != "" {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
// Candidate filenames for sdk server
|
||||
for _, name := range []string{"sdkserver-go.exe", "sdkserver.exe"} {
|
||||
p := filepath.Join(serverDir, name)
|
||||
if info, err := os.Stat(p); err == nil && !info.IsDir() {
|
||||
sdkServer = p
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
logger.Info("FindServerExecutables: serverDir=%s, found gameServer=%s, sdkServer=%s", serverDir, gameServer, sdkServer)
|
||||
logger.Info("FindServerExecutables: found gameServer=%s, sdkServer=%s", gameServer, sdkServer)
|
||||
return gameServer, sdkServer
|
||||
}
|
||||
Reference in new issue
Block a user