public void HandleMessage(IMessageData messageData) { var msgData = messageData as FlagBaseMsgData; if (msgData == null) { return; } switch (msgData.FlagMessageType) { case FlagMessageType.LIST: { var data = (FlagListMsgData)messageData; var serverFlagFiles = data.FlagFileNames; var serverFlagOwners = data.FlagOwners; var serverFlagShaSums = data.FlagShaSums; for (var i = 0; i < serverFlagFiles.Length; i++) { var fi = new FlagInfo { Owner = serverFlagOwners[i], ShaSum = serverFlagShaSums[i] }; System.ServerFlags[Path.GetFileNameWithoutExtension(serverFlagFiles[i])] = fi; } System.SyncComplete = true; //Check if we need to upload the flag System.FlagChangeEvent = true; } break; case FlagMessageType.FLAG_DATA: { var data = (FlagDataMsgData)messageData; var frm = new FlagRespondMessage { FlagInfo = { Owner = data.OwnerPlayerName }, FlagName = data.FlagName, FlagData = data.FlagData }; frm.FlagInfo.ShaSum = Common.CalculateSha256Hash(frm.FlagData); System.NewFlags.Enqueue(frm); } break; case FlagMessageType.DELETE_FILE: { var data = (FlagDeleteMsgData)messageData; var flagName = data.FlagName; var flagFile = CommonUtil.CombinePaths(System.FlagPath, flagName); DeleteFlag(flagFile); } break; } }
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; } }
public ExtendedFlagInfo(FlagInfo flagInfo) { FlagData = Common.TrimArray(flagInfo.FlagData, flagInfo.NumBytes); Owner = flagInfo.Owner; FlagName = flagInfo.FlagName; }