public void HandleMessage(byte[] messageData) { using (MessageReader mr = new MessageReader(messageData)) { FlagMessageType messageType = (FlagMessageType)mr.Read<int>(); switch (messageType) { case FlagMessageType.LIST: { //List code string[] serverFlagFiles = mr.Read<string[]>(); string[] serverFlagOwners = mr.Read<string[]>(); string[] serverFlagShaSums = mr.Read<string[]>(); for (int i = 0; i < serverFlagFiles.Length; i++) { FlagInfo fi = new FlagInfo(); fi.owner = serverFlagOwners[i]; fi.shaSum = serverFlagShaSums[i]; serverFlags[Path.GetFileNameWithoutExtension(serverFlagFiles[i])] = fi; } syncComplete = true; //Check if we need to upload the flag flagChangeEvent = true; } break; case FlagMessageType.FLAG_DATA: { FlagRespondMessage frm = new FlagRespondMessage(); frm.flagInfo.owner = mr.Read<string>(); frm.flagName = mr.Read<string>(); frm.flagData = mr.Read<byte[]>(); frm.flagInfo.shaSum = Common.CalculateSHA256Hash(frm.flagData); newFlags.Enqueue(frm); } break; case FlagMessageType.DELETE_FILE: { string flagName = mr.Read<string>(); string flagFile = Path.Combine(flagPath, flagName); if (File.Exists(flagFile)) { try { if (File.Exists(flagFile)) { DarkLog.Debug("Deleting flag " + flagFile); File.Delete(flagFile); } } catch (Exception e) { DarkLog.Debug("Error deleting flag " + flagFile + ", exception: " + e); } } } break; } } }
private void HandleFlagChangeEvent() { flagChangeEvent = false; string flagURL = HighLogic.CurrentGame.flagURL; if (!flagURL.ToLower().StartsWith("darkmultiplayer/flags/")) { //If it's not a DMP flag don't sync it. return; } string flagName = flagURL.Substring("DarkMultiPlayer/Flags/".Length); if (serverFlags.ContainsKey(flagName) ? serverFlags[flagName].owner != Settings.fetch.playerName : false) { //If the flag is owned by someone else don't sync it return; } string flagFile = ""; string[] flagFiles = Directory.GetFiles(flagPath, "*", SearchOption.TopDirectoryOnly); foreach (string possibleMatch in flagFiles) { if (flagName.ToLower() == Path.GetFileNameWithoutExtension(possibleMatch).ToLower()) { flagFile = possibleMatch; } } //Sanity check to make sure we found the file if (flagFile != "" ? File.Exists(flagFile) : false) { string shaSum = Common.CalculateSHA256Hash(flagFile); if (serverFlags.ContainsKey(flagName) ? serverFlags[flagName].shaSum == shaSum : false) { //Don't send the flag when the SHA sum already matches return; } DarkLog.Debug("Uploading " + Path.GetFileName(flagFile)); using (MessageWriter mw = new MessageWriter()) { mw.Write <int>((int)FlagMessageType.UPLOAD_FILE); mw.Write <string>(Settings.fetch.playerName); mw.Write <string>(Path.GetFileName(flagFile)); mw.Write <byte[]>(File.ReadAllBytes(flagFile)); NetworkWorker.fetch.SendFlagMessage(mw.GetMessageBytes()); } FlagInfo fi = new FlagInfo(); fi.owner = Settings.fetch.playerName; fi.shaSum = Common.CalculateSHA256Hash(flagFile); serverFlags[flagName] = fi; } }
private void HandleFlagChangeEvent() { string flagURL = HighLogic.CurrentGame.flagURL; if (!flagURL.ToLower().StartsWith("darkmultiplayer/flags/")) { //If it's not a DMP flag don't sync it. return; } string flagName = flagURL.Substring("DarkMultiPlayer/Flags/".Length); if (serverFlags.ContainsKey(flagName) ? serverFlags[flagName].owner != Settings.fetch.playerName : false) { //If the flag is owned by someone else don't sync it return; } string flagFile = ""; string[] flagFiles = Directory.GetFiles(flagPath, "*", SearchOption.TopDirectoryOnly); foreach (string possibleMatch in flagFiles) { if (flagName.ToLower() == Path.GetFileNameWithoutExtension(possibleMatch).ToLower()) { flagFile = possibleMatch; } } //Sanity check to make sure we found the file if (flagFile != "" ? File.Exists(flagFile) : false) { string shaSum = Common.CalculateSHA256Hash(flagFile); if (serverFlags.ContainsKey(flagName) ? serverFlags[flagName].shaSum == shaSum : false) { //Don't send the flag when the SHA sum already matches return; } DarkLog.Debug("Uploading " + Path.GetFileName(flagFile)); using (MessageWriter mw = new MessageWriter()) { mw.Write<int>((int)FlagMessageType.UPLOAD_FILE); mw.Write<string>(Settings.fetch.playerName); mw.Write<string>(Path.GetFileName(flagFile)); mw.Write<byte[]>(File.ReadAllBytes(flagFile)); NetworkWorker.fetch.SendFlagMessage(mw.GetMessageBytes()); } FlagInfo fi = new FlagInfo(); fi.owner = Settings.fetch.playerName; fi.shaSum = Common.CalculateSHA256Hash(flagFile); serverFlags[flagName] = fi; } }
public void HandleMessage(byte[] messageData) { using (MessageReader mr = new MessageReader(messageData, false)) { FlagMessageType messageType = (FlagMessageType)mr.Read <int>(); switch (messageType) { case FlagMessageType.LIST: { //List code string[] serverFlagFiles = mr.Read <string[]>(); string[] serverFlagOwners = mr.Read <string[]>(); string[] serverFlagShaSums = mr.Read <string[]>(); for (int i = 0; i < serverFlagFiles.Length; i++) { FlagInfo fi = new FlagInfo(); fi.owner = serverFlagOwners[i]; fi.shaSum = serverFlagShaSums[i]; serverFlags[Path.GetFileNameWithoutExtension(serverFlagFiles[i])] = fi; } syncComplete = true; //Check if we need to upload the flag flagChangeEvent = true; } break; case FlagMessageType.FLAG_DATA: { FlagRespondMessage frm = new FlagRespondMessage(); frm.flagInfo.owner = mr.Read <string>(); frm.flagName = mr.Read <string>(); frm.flagData = mr.Read <byte[]>(); frm.flagInfo.shaSum = Common.CalculateSHA256Hash(frm.flagData); newFlags.Enqueue(frm); } break; case FlagMessageType.DELETE_FILE: { string flagName = mr.Read <string>(); string flagFile = Path.Combine(flagPath, flagName); if (File.Exists(flagFile)) { try { if (File.Exists(flagFile)) { DarkLog.Debug("Deleting flag " + flagFile); File.Delete(flagFile); } } catch (Exception e) { DarkLog.Debug("Error deleting flag " + flagFile + ", exception: " + e); } } } break; } } }