public static void HandleFlagDataMessage(ClientStructure client, FlagDataMsgData message) { var playerFlagPath = Path.Combine(FlagPath, client.PlayerName); if (!FileHandler.FolderExists(playerFlagPath)) { FileHandler.FolderCreate(playerFlagPath); } LunaLog.Debug($"Saving flag {message.Flag.FlagName} from {client.PlayerName}"); FileHandler.WriteToFile(Path.Combine(playerFlagPath, message.Flag.FlagName), message.Flag.FlagData, message.Flag.NumBytes); MessageQueuer.SendToAllClients <FlagSrvMsg>(message); }
public static void HandleFlagDataMessage(ClientStructure client, FlagDataMsgData message) { if (!ValidationRegex.IsMatch(message.Flag.FlagName)) { LunaLog.Warning($"Cannot save flag {message.Flag.FlagName} from {client.PlayerName} as it's flag name has invalid characters"); return; } var playerFlagPath = Path.Combine(FlagPath, client.PlayerName); if (!FileHandler.FolderExists(playerFlagPath)) { FileHandler.FolderCreate(playerFlagPath); } LunaLog.Debug($"Saving flag {message.Flag.FlagName} from {client.PlayerName}"); var newFileName = $"{message.Flag.FlagName.Replace('/', '$')}.png"; FileHandler.WriteToFile(Path.Combine(playerFlagPath, newFileName), message.Flag.FlagData, message.Flag.NumBytes); MessageQueuer.SendToAllClients <FlagSrvMsg>(message); }
public static void HandleListFlagMessage(ClientStructure client, FlagListMsgData message) { //Send the list back var serverFlagFileNames = new List <string>(); var serverFlagOwners = new List <string>(); var serverFlagShaSums = new List <string>(); var serverFlags = FileHandler.GetFilesInPath(FlagPath, SearchOption.AllDirectories); foreach (var serverFlag in serverFlags) { var trimmedName = Path.GetFileName(serverFlag); var flagOwnerPath = Path.GetDirectoryName(serverFlag); var flagOwner = flagOwnerPath.Substring(Path.GetDirectoryName(flagOwnerPath).Length + 1); var isMatched = false; var shaDifferent = false; for (var i = 0; i < message.FlagFileNames.Length; i++) { if (message.FlagFileNames[i].ToLower() == trimmedName.ToLower()) { isMatched = true; shaDifferent = Common.CalculateSha256Hash(serverFlag) != message.FlagShaSums[i]; } } if (!isMatched || shaDifferent) { if (flagOwner == client.PlayerName) { LunaLog.Debug("Deleting flag " + trimmedName); FileHandler.FileDelete(serverFlag); MessageQueuer.RelayMessage <FlagSrvMsg>(client, new FlagDeleteMsgData { FlagName = trimmedName }); if (FileHandler.GetFilesInPath(flagOwnerPath).Length == 0) { FileHandler.FolderDelete(flagOwnerPath); } } else { LunaLog.Debug($"Sending flag {serverFlag} from {flagOwner} to {client.PlayerName}"); var newMessageData = new FlagDataMsgData { FlagName = trimmedName, OwnerPlayerName = flagOwner, FlagData = FileHandler.ReadFile(serverFlag) }; MessageQueuer.SendToClient <FlagSrvMsg>(client, newMessageData); } } //Don't tell the client we have a different copy of the flag so it is reuploaded if (FileHandler.FileExists(serverFlag)) { serverFlagFileNames.Add(trimmedName); serverFlagOwners.Add(flagOwner); serverFlagShaSums.Add(Common.CalculateSha256Hash(serverFlag)); } } var listMessageData = new FlagListMsgData { FlagFileNames = serverFlagFileNames.ToArray(), FlagOwners = serverFlagOwners.ToArray(), FlagShaSums = serverFlagShaSums.ToArray() }; MessageQueuer.SendToClient <FlagSrvMsg>(client, listMessageData); }