Example #1
0
        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;
            }
        }