# ProspectServerSwitcher Petit utilitaire **multi-OS** (Linux/Proton + Windows) pour pointer un client *The Cycle: Frontier* vers un serveur, importer le certificat, et lancer le jeu. ## Pourquoi L'agent Prospect (`Prospect.Agent.dll`, injecté par `Prospect.Client.Loader.exe`) hooke l'URL de l'API PlayFab et la remplace par le contenu de **`backend.txt`**, placé à côté de l'exécutable du jeu (`Prospect/Binaries/Win64`). S'il est absent, l'agent retombe sur `https://127.0.0.1:8443`. **Tout l'aiguillage du client tient donc dans cette seule valeur.** Cet outil ne fait essentiellement qu'écrire le bon `backend.txt` — plus quelques commodités (cert, launch). ## Serveurs (presets) Les presets utilisent les **domaines publics** pour que la même cible marche pour tout le monde (le DNS résout vers l'IP publique pour les amis, et le certificat TLS unifié couvre les deux hostnames) : | Preset | URL | |-----------|----------------------------------| | `prod` | `https://tc.nfteam.ovh:8443` | | `preprod` | `https://rd-tc.nfteam.ovh:8444` | > **Sur le même LAN que le serveur**, ajoute une entrée hosts pour éviter le hairpin NAT : > ``` > 192.168.1.136 tc.nfteam.ovh > 192.168.1.136 rd-tc.nfteam.ovh > ``` ## Utilisation ### Menu interactif Lance le binaire sans argument : - **1** : définir le dossier du jeu (`…/Prospect/Binaries/Win64`) — mémorisé - **2/3** : basculer sur PROD / PREPROD - **4** : URL personnalisée - **5** : importer un certificat (`.crt`) - **6** : lancer le jeu - **0** : quitter ### En ligne de commande (scriptable) ``` ProspectServerSwitcher --folder "<...>/Prospect/Binaries/Win64" --set preprod ProspectServerSwitcher --set prod ProspectServerSwitcher --set https://mon-serveur:8443 # URL libre ``` > ⚠️ `backend.txt` n'est lu qu'**au démarrage** du loader → relance le jeu après un switch. > Le serveur ciblé doit **tourner** (conteneurs on-demand `the-cycle-api` / `the-cycle-api-rd`). ## Certificat L'outil récupère le certificat **en direct depuis le serveur** ciblé (il lit `backend.txt` et se connecte en TLS), puis le rend fiable : - **Windows** : import automatique dans *Autorités de certification racines de confiance* (utilisateur courant), via le magasin `X509Store`. - **Linux/Proton** : import **automatique dans le préfixe Wine** du jeu. Comme `wine certutil` est cassé sous Proton, l'outil écrit directement le *blob* sérialisé du certificat (propriété SHA1 `id=3` + certificat encodé `id=0x20`) dans le magasin `Root` du préfixe via `wine reg import`. Il : 1. détecte le binaire `wine` de Proton (`…/common/Proton*/files/bin/wine`), 2. liste les préfixes `compatdata/*/pfx` (le plus récemment utilisé en premier), 3. importe dans le préfixe choisi (⚠️ **le jeu doit être fermé**), mémorisé ensuite. > ⚠️ Le client tourne souvent comme **raccourci non-Steam** → son préfixe n'est **pas** > `compatdata/868270` mais un appid généré (ex. `3883998305`). D'où la sélection explicite > du préfixe plutôt qu'une déduction sur l'appid du jeu. ## Lancement - **Windows** : démarre `Prospect.Client.Loader.exe` depuis le dossier du jeu. - **Linux/Proton** : passe par Steam (`steam steam://rungameid/868270`) — le loader doit tourner dans le préfixe Proton. ## Réglages Le dossier du jeu est mémorisé dans `…/ApplicationData/ProspectSwitcher/settings.json` (`%AppData%` sous Windows, `~/.config` sous Linux). ## Build / publication Projet console **net8.0** (cross-platform, `InvariantGlobalization`), jamais buildé par la CI serveur (Linux). ```bash # build simple dotnet build src/Prospect.Client.Config -c Release # binaires autonomes single-file (aucun .NET requis chez l'utilisateur) dotnet publish src/Prospect.Client.Config -c Release -r win-x64 --self-contained \ -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -p:EnableCompressionInSingleFile=true dotnet publish src/Prospect.Client.Config -c Release -r linux-x64 --self-contained \ -p:PublishSingleFile=true -p:EnableCompressionInSingleFile=true ``` Les binaires publiés sont distribués via la release Gitea **`friends-client`** (`ProspectServerSwitcher.exe` pour Windows, `ProspectServerSwitcher-linux-x64` pour Linux).