コード例 #1
0
        private async Task <ModificationContext> GetModificationContext(HttpContext context, RequestPhase phase)
        {
            ModificationContext modificationContext = null;

            if (phase == RequestPhase.Request)
            {
                var requestBodyBuffer = new MemoryStream();

                await context.Request.Body.CopyToAsync(requestBodyBuffer);

                requestBodyBuffer.Seek(0, SeekOrigin.Begin);

                return(new ModificationContext(requestBodyBuffer, context.Request.ContentType));
            }

            if (phase == RequestPhase.Response)
            {
                var responseStreamBuffer = context.Response.Body;

                responseStreamBuffer.Position = 0;

                return(new ModificationContext(responseStreamBuffer, context.Response.ContentType));
            }

            return(modificationContext);
        }
コード例 #2
0
        protected override void Execute(ModificationContext context, double level)
        {
            var viewRangeFactor = CrewBasicSkill.GetIncrementalSkillFactor(level);

            context.SetValue(this.EffectiveDomains[0], ViewRangeFactorSkillKey, viewRangeFactor);
            var crewTrainingLevelBuff = level / 10;

            context.SetValue(this.EffectiveDomains[0], CrewTrainingLevelBuffSkillKey, crewTrainingLevelBuff);
        }
コード例 #3
0
        protected override void Execute(ModificationContext context, double level)
        {
            var decrementalFactor = CrewBasicSkill.GetDecrementalSkillFactor(level);

            context.SetValue(this.EffectiveDomains[0], AccuracyFactorSkillKey, decrementalFactor);
            context.SetValue(this.EffectiveDomains[0], AimingTimeFactorSkillKey, decrementalFactor);
            context.SetValue(this.EffectiveDomains[0], ShotDispersionFactorSkillKey, decrementalFactor);

            var incrementalFactor = CrewBasicSkill.GetIncrementalSkillFactor(level);

            context.SetValue(this.EffectiveDomains[0], TurretRotationSpeedSkillKey, incrementalFactor);
        }
コード例 #4
0
        public async Task Register(ModificationContext modificationContext, IJSEngine engine)
        {
            string jsonContent = string.Empty;

            using (StreamReader reader = new StreamReader(modificationContext.ContentStream, GetEncoding(modificationContext.ContentType)))
            {
                jsonContent = await reader.ReadToEndAsync();
            }

            _content = new StringBuilder(jsonContent);

            engine.InitializeJsonApi(_content);
        }
コード例 #5
0
        public async Task <IContentAbstraction> GetAbstractionProviderAsync(ModificationContext context)
        {
            var defaultAbstractionType = typeof(DefaultAbstraction);

            var providerType = _options.Value.ContentProviders.GetProviderType(GetMediaType(context.ContentType));

            providerType = providerType ?? defaultAbstractionType;

            var instance = ActivateAbstraction(providerType);

            var isContentValidForType = await instance.ValidateAsync(context);

            return(isContentValidForType ? instance : ActivateAbstraction(defaultAbstractionType));
        }
コード例 #6
0
        public async Task Register(ModificationContext modificationContext, IJSEngine engine)
        {
            string html = string.Empty;

            using (StreamReader reader = new StreamReader(modificationContext.ContentStream, GetEncoding(modificationContext.ContentType)))
            {
                html = await reader.ReadToEndAsync();
            }

            if (!string.IsNullOrEmpty(html))
            {
                _htmlDocument = new HtmlDocument();

                _htmlDocument.LoadHtml(html);
            }

            engine.InitializeHtmlDocumentApi(_htmlDocument);
        }
コード例 #7
0
        public async Task <bool> ValidateAsync(ModificationContext context)
        {
            var content = await context.GetContentStringAsync();

            if (content.Length == 0)
            {
                return(false);
            }

            var length = content.Length >= 100 ? 100 : content.Length;

            var htmlStart = content
                            .TrimStart()
                            .Substring(0, length)
                            .Replace("\r", string.Empty)
                            .Replace("\n", string.Empty);

            return(htmlStart.StartsWith("<"));
        }
コード例 #8
0
        public async Task Register(ModificationContext modificationContext, IJSEngine engine)
        {
            string content = string.Empty;

            var encoding = GetEncoding(modificationContext.ContentType);

            if (encoding == null)
            {
                return;
            }

            using (StreamReader reader = new StreamReader(modificationContext.ContentStream, encoding))
            {
                content = await reader.ReadToEndAsync();
            }

            _content = new StringBuilder(content);

            engine.InitializeContentApi(_content);
        }
コード例 #9
0
        public void Modify(XElement ssdl, IProviderInformation newProvider)
        {
            if (ssdl == null)
            {
                throw new ArgumentNullException("root");
            }

            if (newProvider == null)
            {
                throw new ArgumentNullException("newProvider");
            }

            IElementModifier appropriateModifier = null;
            XNamespace       ns = ssdl.Name.Namespace;

            // Find the appropriate modifier
            if (ns == StorageSchemaV1Modifier.Namespace)
            {
                appropriateModifier = this.SchemaV1Modifier;
            }
            else if (ns == StorageSchemaV2Modifier.Namespace)
            {
                appropriateModifier = this.SchemaV2Modifier;
            }
            else if (ns == StorageSchemaV3Modifier.Namespace)
            {
                appropriateModifier = this.SchemaV3Modifier;
            }

            if (appropriateModifier == null)
            {
                throw new ArgumentException("", "root");
            }

            IModificationContext context = new ModificationContext();

            context.Set(ModificationContextHelper.NewProvider, newProvider);

            appropriateModifier.Modify(ssdl, context);
        }
コード例 #10
0
        public void Modify(XElement ssdl, IProviderInformation newProvider)
        {
            if (ssdl == null)
            {
                throw new ArgumentNullException("root");
            }

            if (newProvider == null)
            {
                throw new ArgumentNullException("newProvider");
            }

            IElementModifier appropriateModifier = null;
            XNamespace ns = ssdl.Name.Namespace;

            // Find the appropriate modifier
            if (ns == StorageSchemaV1Modifier.Namespace)
            {
                appropriateModifier = this.SchemaV1Modifier;
            }
            else if (ns == StorageSchemaV2Modifier.Namespace)
            {
                appropriateModifier = this.SchemaV2Modifier;
            }
            else if (ns == StorageSchemaV3Modifier.Namespace)
            {
                appropriateModifier = this.SchemaV3Modifier;
            }

            if (appropriateModifier == null)
            {
                throw new ArgumentException("", "root");
            }

            IModificationContext context = new ModificationContext();
            context.Set(ModificationContextHelper.NewProvider, newProvider);

            appropriateModifier.Modify(ssdl, context);
        }
コード例 #11
0
ファイル: NullModifier.cs プロジェクト: gitter-badger/Farada
        public IList <object> Modify(ModificationContext context, IList <object> instances)
        {
            if (context.MemberType.IsCompoundType() || context.MemberType.IsValueType)
            {
                return(instances);
            }

            if (context.Member != null &&
                (context.Member.IsDefined(typeof(RequiredAttribute))))
            {
                return(instances);
            }

            var instancesToNull = (int)(instances.Count * _nullPercentage);

            for (var i = 0; i < instancesToNull; i++)
            {
                instances[i] = null;
            }

            instances.Randomize(context.Random);
            return(instances);
        }
コード例 #12
0
 protected override void Execute(ModificationContext context, double level)
 {
     // todo: fire fighting speed formular unknown
 }
コード例 #13
0
 protected override void Execute(ModificationContext context, double level)
 {
     // dummy
 }
コード例 #14
0
        protected override void Execute(ModificationContext context, double level)
        {
            var signalRangeFactor = CrewBasicSkill.GetIncrementalSkillFactor(level);

            context.SetValue(this.EffectiveDomains[0], SignalRangeFactorSkillKey, signalRangeFactor);
        }
コード例 #15
0
 protected override void Clear(ModificationContext context)
 {
     context.SetValue(this.EffectiveDomains[0], CrewTrainingLevelIncrementSkillKey, 0);
 }
コード例 #16
0
 protected override void Clear(ModificationContext context)
 {
     context.SetValue(this.EffectiveDomains[0], DistanceFactorPerLevelWhenDeviceWorkingSkillKey, 0);
     context.SetValue(this.EffectiveDomains[0], DistanceFactorPerLevelWhenDeviceDestroyedSkillKey, 0);
 }
コード例 #17
0
 protected override void Clear(ModificationContext context)
 {
     context.SetValue(this.EffectiveDomains[0], RadioDistanceFactorSkillKey, 0);
 }
コード例 #18
0
 protected override void Clear(ModificationContext context)
 {
     context.SetValue(this.EffectiveDomains[0], ShotDispersionDecrementFactorSkillKey, 0);
 }
コード例 #19
0
 protected override void Execute(ModificationContext context, double level)
 {
     context.SetValue(this.EffectiveDomains[0], ShotDispersionDecrementFactorSkillKey, this.Parameters["shotDispersionFactorPerLevel"] * level);
 }
コード例 #20
0
 protected override void Execute(ModificationContext context, double level)
 {
     context.SetValue(this.EffectiveDomains[0], CrewTrainingLevelIncrementSkillKey, this.Parameters["crewLevelIncrease"]);
 }
コード例 #21
0
 protected override void Clear(ModificationContext context)
 {
     context.SetValue(this.EffectiveDomains[0], SoftGroundResistanceFactorDecrementSkillKey, 0);
     context.SetValue(this.EffectiveDomains[0], MediumGroundResistanceFactorDecrementSkillKey, 0);
 }
コード例 #22
0
 protected override void Execute(ModificationContext context, double level)
 {
     context.SetValue(this.EffectiveDomains[0], SoftGroundResistanceFactorDecrementSkillKey, this.Parameters["softGroundResistanceFactorPerLevel"] * level);
     context.SetValue(this.EffectiveDomains[0], MediumGroundResistanceFactorDecrementSkillKey, this.Parameters["mediumGroundResistanceFactorPerLevel"] * level);
 }
コード例 #23
0
 public async Task <bool> ValidateAsync(ModificationContext context)
 {
     return(true);
 }
コード例 #24
0
 protected override void Clear(ModificationContext context)
 {
 }
コード例 #25
0
 protected override void Clear(ModificationContext context)
 {
     context.SetValue(this.EffectiveDomains[0], ChassisRotationSpeedIncrementFactor, 0);
 }
コード例 #26
0
 protected override void Execute(ModificationContext context, double level)
 {
     context.SetValue(this.EffectiveDomains[0], RadioDistanceFactorSkillKey, this.Parameters["radioDistanceFactorPerLevel"] * level);
 }
コード例 #27
0
 protected override void Execute(ModificationContext context, double level)
 {
     context.SetValue(this.EffectiveDomains[0], EngineFireChanceDecrementSkillKey, this.Parameters["fireStartingChanceFactor"]);
 }
コード例 #28
0
 protected override void Execute(ModificationContext context, double level)
 {
     context.SetValue(this.EffectiveDomains[0], DistanceFactorPerLevelWhenDeviceWorkingSkillKey, level * this.Parameters["distanceFactorPerLevelWhenDeviceWorking"]);
     context.SetValue(this.EffectiveDomains[0], DistanceFactorPerLevelWhenDeviceDestroyedSkillKey, level * this.Parameters["distanceFactorPerLevelWhenDeviceDestroyed"]);
 }
コード例 #29
0
 protected override void Clear(ModificationContext context)
 {
     context.SetValue(this.EffectiveDomains[0], EngineFireChanceDecrementSkillKey, 1.0);
 }
コード例 #30
0
        protected override void Execute(ModificationContext context, double level)
        {
            var terrainResistanceFactor = CrewBasicSkill.GetDecrementalSkillFactor(level);

            context.SetValue(this.EffectiveDomains[0], TerrainResistanceFactorSkillKey, terrainResistanceFactor);
        }
コード例 #31
0
        private async Task ExecuteRules(HttpContext context, IContentAbstraction contentAbstraction, ModificationContext modificationContext, IEnumerable <JavascriptModifier> modifiers)
        {
            using (var jsEngine = _serviceProvider.GetService <IJSEngine>())
            {
                jsEngine.Start();

                await contentAbstraction.Register(modificationContext, jsEngine);

                foreach (var modifier in modifiers)
                {
                    try
                    {
                        bool executeModificationFunction = string.IsNullOrEmpty(modifier.DiscoveryFunction) || jsEngine.Evaluate <bool>(modifier.DiscoveryFunction) ? true : false;

                        if (executeModificationFunction)
                        {
                            jsEngine.Execute(modifier.ModificationFunction);
                        }
                    }
                    catch (Exception ex)
                    {
                        _logger.LogError($"Rule Exception: {ex}");
                    }
                }
            }
        }