/// <summary>
        /// Patches the scenario file with strategy data
        /// </summary>
        private static string UpdateScenarioWithStrategyData(string scenarioData, StrategyInfo strategy)
        {
            var document = new XmlDocument();

            document.LoadXml(scenarioData);

            var strategiesList = document.SelectSingleNode($"/{ConfigNodeXmlParser.StartElement}/{ConfigNodeXmlParser.ParentNode}[@name='STRATEGIES']");

            if (strategiesList != null)
            {
                var receivedStrategy = DeserializeAndImportNode(strategy.Data, strategy.NumBytes, document);
                if (receivedStrategy != null)
                {
                    var existingStrategy = strategiesList.SelectSingleNode($"{ConfigNodeXmlParser.ParentNode}[@name='STRATEGY']/" +
                                                                           $@"{ConfigNodeXmlParser.ValueNode}[@name='name' and text()=""{strategy.Name}""]/" +
                                                                           $"parent::{ConfigNodeXmlParser.ParentNode}[@name='STRATEGY']");
                    if (existingStrategy != null)
                    {
                        //Replace the existing stragegy value with the received one
                        existingStrategy.InnerXml = receivedStrategy.InnerXml;
                    }
                    else
                    {
                        var newStrategyNode = ConfigNodeXmlParser.CreateXmlNode("STRATEGY", document);
                        newStrategyNode.InnerXml = receivedStrategy.InnerXml;
                        strategiesList.AppendChild(newStrategyNode);
                    }
                }
            }

            return(document.ToIndentedString());
        }
Esempio n. 2
0
        /// <summary>
        /// Patches the scenario file with reputation data
        /// </summary>
        private static string UpdateScenarioWithContractData(string scenarioData, ContractInfo[] contracts)
        {
            var document = new XmlDocument();

            document.LoadXml(scenarioData);

            var contractsList = document.SelectSingleNode($"/{ConfigNodeXmlParser.StartElement}/{ConfigNodeXmlParser.ParentNode}[@name='CONTRACTS']");

            if (contractsList != null)
            {
                foreach (var contract in contracts)
                {
                    var receivedContract = DeserializeAndImportNode(contract.Data, contract.NumBytes, document);
                    if (receivedContract == null)
                    {
                        continue;
                    }

                    var existingContract = contractsList.SelectSingleNode($"{ConfigNodeXmlParser.ParentNode}[@name='CONTRACT']/" +
                                                                          $@"{ConfigNodeXmlParser.ValueNode}[@name='guid' and text()=""{contract.ContractGuid}""]/" +
                                                                          $"parent::{ConfigNodeXmlParser.ParentNode}[@name='CONTRACT']");
                    if (existingContract != null)
                    {
                        //Replace the existing contract values with the received one
                        existingContract.InnerXml = receivedContract.InnerXml;
                    }
                    else
                    {
                        var newContractNode = ConfigNodeXmlParser.CreateXmlNode("CONTRACT", document);
                        newContractNode.InnerXml = receivedContract.InnerXml;
                        contractsList.AppendChild(newContractNode);
                    }
                }
            }

            return(document.ToIndentedString());
        }
        /// <summary>
        /// Patches the scenario file with achievement data
        /// </summary>
        private static string UpdateScenarioWithAchievementData(string scenarioData, AchievementInfo[] achievements)
        {
            var document = new XmlDocument();

            document.LoadXml(scenarioData);

            var progressList = document.SelectSingleNode($"/{ConfigNodeXmlParser.StartElement}/{ConfigNodeXmlParser.ParentNode}[@name='Progress']");

            if (progressList != null)
            {
                foreach (var achievement in achievements)
                {
                    var receivedAchievementXmlNode = DeserializeAndImportNode(achievement.Data, achievement.NumBytes, document);
                    if (receivedAchievementXmlNode == null)
                    {
                        continue;
                    }

                    var existingAchievement = progressList.SelectSingleNode($"{ConfigNodeXmlParser.ParentNode}[@name='{achievement.Id}']");
                    if (existingAchievement != null)
                    {
                        //Replace the existing contract values with the received one
                        existingAchievement.InnerXml = receivedAchievementXmlNode.InnerXml;
                    }
                    else
                    {
                        var newAchievement = ConfigNodeXmlParser.CreateXmlNode(achievement.Id, document);
                        newAchievement.InnerXml = receivedAchievementXmlNode.InnerXml;

                        progressList.AppendChild(newAchievement);
                    }
                }
            }

            return(document.ToIndentedString());
        }