Exemplo n.º 1
0
        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;
            }
        }
Exemplo n.º 2
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;
            }
        }
Exemplo n.º 3
0
 public ExtendedFlagInfo(FlagInfo flagInfo)
 {
     FlagData = Common.TrimArray(flagInfo.FlagData, flagInfo.NumBytes);
     Owner    = flagInfo.Owner;
     FlagName = flagInfo.FlagName;
 }