private void HandleFlagChangeEvent() { var flagUrl = HighLogic.CurrentGame.flagURL; //If it's not a LMP flag don't sync it. if (!flagUrl.ToLower().StartsWith("lunamultiplayer/flags/")) { return; } var flagName = flagUrl.Substring("LunaMultiPlayer/Flags/".Length); //If the flag is owned by someone else don't sync it if (ServerFlags.ContainsKey(flagName) && (ServerFlags[flagName].Owner != SettingsSystem.CurrentSettings.PlayerName)) { return; } var flagFiles = Directory.GetFiles(FlagPath, "*", SearchOption.TopDirectoryOnly); var flagFile = flagFiles.FirstOrDefault(f => string.Equals(flagName, Path.GetFileNameWithoutExtension(f), StringComparison.CurrentCultureIgnoreCase)); //Sanity check to make sure we found the file if (!string.IsNullOrEmpty(flagFile) && File.Exists(flagFile)) { var shaSum = Common.CalculateSha256Hash(flagFile); //Don't send the flag when the SHA sum already matches if (ServerFlags.ContainsKey(flagName) && (ServerFlags[flagName].ShaSum == shaSum)) { return; } Debug.Log($"[LMP]: Uploading {Path.GetFileName(flagFile)}"); MessageSender.SendMessage(new FlagUploadMsgData { PlayerName = SettingsSystem.CurrentSettings.PlayerName, FlagName = Path.GetFileName(flagFile), FlagData = File.ReadAllBytes(flagFile) }); var fi = new FlagInfo { Owner = SettingsSystem.CurrentSettings.PlayerName, ShaSum = Common.CalculateSha256Hash(flagFile) }; ServerFlags[flagName] = fi; } }