Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }