public static bool IsCorrectlyInstalled() { var assembly = Assembly.GetExecutingAssembly(); var assemblyInstalledAt = new DirectoryInfo(assembly.Location).FullName; var kspPath = new DirectoryInfo(MainSystem.KspPath).FullName; var shouldBeInstalledAt = CommonUtil.CombinePaths(kspPath, "GameData", "LunaMultiPlayer", "Plugins", "LunaClient.dll"); _currentPath = assemblyInstalledAt; _correctPath = shouldBeInstalledAt; if (File.Exists(shouldBeInstalledAt)) { return(true); } return(assemblyInstalledAt == shouldBeInstalledAt); }
public static IEnumerable <string> GetSavedNames() { var returnList = new List <string>(); var possibleSaves = Directory.GetDirectories(SavesFolder); foreach (var saveDirectory in possibleSaves) { var trimmedDirectory = saveDirectory; //Cut the trailing path character off if we need to if (saveDirectory[saveDirectory.Length - 1] == Path.DirectorySeparatorChar) { trimmedDirectory = saveDirectory.Substring(0, saveDirectory.Length - 2); } var saveName = trimmedDirectory.Substring(trimmedDirectory.LastIndexOf(Path.DirectorySeparatorChar) + 1); if (saveName.ToLower() != "training" && saveName.ToLower() != "scenarios" && File.Exists(CommonUtil.CombinePaths(saveDirectory, "persistent.sfs"))) { returnList.Add(saveName); } } return(returnList); }
private void SaveToCache(byte[] fileData) { if ((fileData == null) || (fileData.Length == 0)) { return; } var objectName = Common.CalculateSha256Hash(fileData); var objectFile = CommonUtil.CombinePaths(CacheDirectory, objectName + ".txt"); var incomingFile = CommonUtil.CombinePaths(CacheDirectory, "Incoming", objectName + ".txt"); if (!File.Exists(objectFile)) { File.WriteAllBytes(incomingFile, fileData); File.Move(incomingFile, objectFile); CurrentCacheSize += fileData.Length; FileLengths[objectName] = fileData.Length; FileCreationTimes[objectName] = new FileInfo(objectFile).CreationTime; } else { File.SetCreationTime(objectFile, DateTime.Now); FileCreationTimes[objectName] = new FileInfo(objectFile).CreationTime; } }
public static void GenerateUniverse(string saveName) { var universeFolder = CommonUtil.CombinePaths(Client.KspPath, "Universe"); if (Directory.Exists(universeFolder)) { Directory.Delete(universeFolder, true); } var saveFolder = CommonUtil.CombinePaths(SavesFolder, saveName); if (!Directory.Exists(saveFolder)) { LunaLog.Log($"[LMP]: Failed to generate a LMP universe for '{saveName}', Save directory doesn't exist"); ScreenMessages.PostScreenMessage($"Failed to generate a LMP universe for '{saveName}', Save directory doesn't exist", 5f, ScreenMessageStyle.UPPER_CENTER); return; } var persistentFile = CommonUtil.CombinePaths(saveFolder, "persistent.sfs"); if (!File.Exists(persistentFile)) { LunaLog.Log($"[LMP]: Failed to generate a LMP universe for '{saveName}', persistent.sfs doesn't exist"); ScreenMessages.PostScreenMessage($"Failed to generate a LMP universe for '{saveName}', persistent.sfs doesn't exist", 5f, ScreenMessageStyle.UPPER_CENTER); return; } Directory.CreateDirectory(universeFolder); var vesselFolder = CommonUtil.CombinePaths(universeFolder, "Vessels"); Directory.CreateDirectory(vesselFolder); var scenarioFolder = CommonUtil.CombinePaths(universeFolder, "Scenarios"); Directory.CreateDirectory(scenarioFolder); var playerScenarioFolder = CommonUtil.CombinePaths(scenarioFolder, SettingsSystem.CurrentSettings.PlayerName); Directory.CreateDirectory(playerScenarioFolder); var kerbalFolder = CommonUtil.CombinePaths(universeFolder, "Kerbals"); Directory.CreateDirectory(kerbalFolder); //Load game data var persistentData = ConfigNode.Load(persistentFile); if (persistentData == null) { LunaLog.Log($"[LMP]: Failed to generate a LMP universe for '{saveName}', failed to load persistent data"); ScreenMessages.PostScreenMessage($"Failed to generate a LMP universe for '{saveName}', failed to load persistent data", 5f, ScreenMessageStyle.UPPER_CENTER); return; } var gameData = persistentData.GetNode("GAME"); if (gameData == null) { LunaLog.Log($"[LMP]: Failed to generate a LMP universe for '{saveName}', failed to load game data"); ScreenMessages.PostScreenMessage($"Failed to generate a LMP universe for '{saveName}', failed to load game data", 5f, ScreenMessageStyle.UPPER_CENTER); return; } //Save vessels var flightState = gameData.GetNode("FLIGHTSTATE"); if (flightState == null) { LunaLog.Log($"[LMP]: Failed to generate a LMP universe for '{saveName}', failed to load flight state data"); ScreenMessages.PostScreenMessage($"Failed to generate a LMP universe for '{saveName}', failed to load flight state data", 5f, ScreenMessageStyle.UPPER_CENTER); return; } var vesselNodes = flightState.GetNodes("VESSEL"); if (vesselNodes != null) { foreach (var cn in vesselNodes) { var vesselId = Common.ConvertConfigStringToGuidString(cn.GetValue("pid")); LunaLog.Log($"[LMP]: Saving vessel {vesselId}, Name: {cn.GetValue("Name")}"); cn.Save(CommonUtil.CombinePaths(vesselFolder, $"{vesselId}.txt")); } } //Save scenario data var scenarioNodes = gameData.GetNodes("SCENARIO"); if (scenarioNodes != null) { foreach (var cn in scenarioNodes) { var scenarioName = cn.GetValue("Name"); LunaLog.Log($"[LMP]: Saving scenario: {scenarioName}"); cn.Save(CommonUtil.CombinePaths(playerScenarioFolder, $"{scenarioName}.txt")); } } //Save kerbal data var kerbalNodes = gameData.GetNode("ROSTER").GetNodes("CREW"); if (kerbalNodes != null) { var kerbalIndex = 0; foreach (var cn in kerbalNodes) { LunaLog.Log($"[LMP]: Saving kerbal {kerbalIndex}, Name: {cn.GetValue("Name")}"); cn.Save(CommonUtil.CombinePaths(kerbalFolder, $"{kerbalIndex}.txt")); kerbalIndex++; } } LunaLog.Log($"[LMP]: Generated KSP_folder/Universe from {saveName}"); ScreenMessages.PostScreenMessage($"Generated KSP_folder/Universe from {saveName}", 5f, ScreenMessageStyle.UPPER_CENTER); }
public static void GenerateUniverse(string saveName) { var universeFolder = CommonUtil.CombinePaths(MainSystem.KspPath, "Universe"); if (Directory.Exists(universeFolder)) { Directory.Delete(universeFolder, true); } var saveFolder = CommonUtil.CombinePaths(SavesFolder, saveName); if (!Directory.Exists(saveFolder)) { LunaLog.Log($"[LMP]: Failed to generate a LMP universe for '{saveName}', Save directory doesn't exist"); LunaScreenMsg.PostScreenMessage($"Failed to generate a LMP universe for '{saveName}', Save directory doesn't exist", 5f, ScreenMessageStyle.UPPER_CENTER); return; } var persistentFile = CommonUtil.CombinePaths(saveFolder, "persistent.sfs"); if (!File.Exists(persistentFile)) { LunaLog.Log($"[LMP]: Failed to generate a LMP universe for '{saveName}', persistent.sfs doesn't exist"); LunaScreenMsg.PostScreenMessage($"Failed to generate a LMP universe for '{saveName}', persistent.sfs doesn't exist", 5f, ScreenMessageStyle.UPPER_CENTER); return; } Directory.CreateDirectory(universeFolder); var vesselFolder = CommonUtil.CombinePaths(universeFolder, "Vessels"); Directory.CreateDirectory(vesselFolder); var scenarioFolder = CommonUtil.CombinePaths(universeFolder, "Scenarios"); Directory.CreateDirectory(scenarioFolder); var kerbalFolder = CommonUtil.CombinePaths(universeFolder, "Kerbals"); Directory.CreateDirectory(kerbalFolder); //Load game data var persistentData = ConfigNode.Load(persistentFile); if (persistentData == null) { LunaLog.Log($"[LMP]: Failed to generate a LMP universe for '{saveName}', failed to load persistent data"); LunaScreenMsg.PostScreenMessage($"Failed to generate a LMP universe for '{saveName}', failed to load persistent data", 5f, ScreenMessageStyle.UPPER_CENTER); return; } var gameData = persistentData.GetNode("GAME"); if (gameData == null) { LunaLog.Log($"[LMP]: Failed to generate a LMP universe for '{saveName}', failed to load game data"); LunaScreenMsg.PostScreenMessage($"Failed to generate a LMP universe for '{saveName}', failed to load game data", 5f, ScreenMessageStyle.UPPER_CENTER); return; } //Save vessels var flightState = gameData.GetNode("FLIGHTSTATE"); if (flightState == null) { LunaLog.Log($"[LMP]: Failed to generate a LMP universe for '{saveName}', failed to load flight state data"); LunaScreenMsg.PostScreenMessage($"Failed to generate a LMP universe for '{saveName}', failed to load flight state data", 5f, ScreenMessageStyle.UPPER_CENTER); return; } var vesselNodes = flightState.GetNodes("VESSEL"); if (vesselNodes != null) { foreach (var cn in vesselNodes) { var vesselId = Common.ConvertConfigStringToGuidString(cn.GetValue("pid")); LunaLog.Log($"[LMP]: Saving vessel {vesselId}, Name: {cn.GetValue("name")}"); var xmlData = ConfigNodeXmlParser.ConvertToXml(Encoding.UTF8.GetString(ConfigNodeSerializer.Serialize(cn))); File.WriteAllText(CommonUtil.CombinePaths(vesselFolder, $"{vesselId}.xml"), xmlData); } } //Save scenario data var scenarioNodes = gameData.GetNodes("SCENARIO"); if (scenarioNodes != null) { foreach (var cn in scenarioNodes) { var scenarioName = cn.GetValue("name"); if (string.IsNullOrEmpty(scenarioName)) { continue; } LunaLog.Log($"[LMP]: Saving scenario: {scenarioName}"); var xmlData = ConfigNodeXmlParser.ConvertToXml(Encoding.UTF8.GetString(ConfigNodeSerializer.Serialize(cn))); File.WriteAllText(CommonUtil.CombinePaths(scenarioFolder, $"{scenarioName}.xml"), xmlData); } } //Save kerbal data var kerbalNodes = gameData.GetNode("ROSTER").GetNodes("KERBAL"); if (kerbalNodes != null) { foreach (var cn in kerbalNodes) { var kerbalName = cn.GetValue("name"); LunaLog.Log($"[LMP]: Saving kerbal: {kerbalName}"); cn.Save(CommonUtil.CombinePaths(kerbalFolder, $"{kerbalName}.txt")); } } LunaLog.Log($"[LMP]: Generated KSP_folder/Universe from {saveName}"); LunaScreenMsg.PostScreenMessage($"Generated KSP_folder/Universe from {saveName}", 5f, ScreenMessageStyle.UPPER_CENTER); }
/// <summary> /// Delete old cache files or if size is bigger than the limit. /// </summary> public static void ExpireCache() { LunaLog.Log("[LMP]: Expiring cache!"); //No folder, no delete. if (!Directory.Exists(CommonUtil.CombinePaths(CacheDirectory, "Incoming"))) { LunaLog.Log("[LMP]: No sync cache folder, skipping expire."); return; } //Delete partial incoming files var incomingFiles = Directory.GetFiles(CommonUtil.CombinePaths(CacheDirectory, "Incoming")); foreach (var incomingFile in incomingFiles) { LunaLog.Log($"[LMP]: Deleting partially cached object {incomingFile}"); File.Delete(incomingFile); } //Delete old files var cacheObjects = GetCachedObjects(); CurrentCacheSize = 0; foreach (var cacheObject in cacheObjects) { var cacheFile = CommonUtil.CombinePaths(CacheDirectory, $"{cacheObject}.txt"); //If the file is older than a week, delete it. if (File.GetCreationTime(cacheFile).AddDays(7d) < DateTime.Now) { LunaLog.Log($"[LMP]: Deleting cached object {cacheObject}, reason: Expired!"); File.Delete(cacheFile); } else { var fi = new FileInfo(cacheFile); FileCreationTimes[cacheObject] = fi.CreationTime; FileLengths[cacheObject] = fi.Length; CurrentCacheSize += fi.Length; } } //While the directory is over (cacheSize) MB while (CacheSizeExceeded()) { var deleteObject = string.Empty; //Find oldest file foreach (var testFile in FileCreationTimes) { if (string.IsNullOrEmpty(deleteObject)) { deleteObject = testFile.Key; } if (testFile.Value < FileCreationTimes[deleteObject]) { deleteObject = testFile.Key; } } LunaLog.Log($"[LMP]: Deleting cached object {deleteObject}, reason: Cache full!"); var deleteFile = CommonUtil.CombinePaths(CacheDirectory, $"{deleteObject}.txt"); File.Delete(deleteFile); CurrentCacheSize -= FileLengths[deleteObject]; if (FileCreationTimes.ContainsKey(deleteObject)) { FileCreationTimes.Remove(deleteObject); } if (FileLengths.ContainsKey(deleteObject)) { FileLengths.Remove(deleteObject); } } }