示例#1
0
        /// <summary>
        /// Débuter le traitement de toutes les ressources.
        /// </summary>
        public void Reprocess()
        {
            lock (_lock)
            {
                foreach (Resource resource in Resources.Values.Where(x => x.Status == ResourceStatus.Ignored || x.Status == ResourceStatus.ReadyToProcess))
                {
                    IBehaviorRule rule = _behaviorRules.GetBehaviorRule(resource);
                    resource.Behavior = rule == null ? ResourceBehavior.Ignore : rule.Behavior;

                    // En fonction du behavior et de la limitation de ressource, on décide
                    // si une ressource devra être traitée ou non.
                    if (resource.Behavior != ResourceBehavior.Ignore && (!_limitResources.HasValue || _limitResources > 0))
                    {
                        if (_limitResources.HasValue)
                        {
                            _limitResources--;
                        }
                        resource.Status = ResourceStatus.ReadyToProcess;
                        rule.TargetBucket.QueueItem(resource);
                        resource.CurrentBucket = rule.TargetBucket.Name;
                    }
                    else
                    {
                        resource.Status        = ResourceStatus.Ignored;
                        resource.CurrentBucket = null;
                    }
                }
            }
        }
示例#2
0
        /// <summary>
        /// Récupère une ressource à partir d'une URL absolue. Utilise un caching afin qu'une
        /// même ressource ne soit pas traitée deux fois.
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        private Resource GetResource(Uri url, ResourceContentType initialContentType)
        {
            Resource resource;
            Uri      urlWithoutSessionId = url.WithoutSession();

            if (!Resources.TryGetValue(urlWithoutSessionId.AbsoluteUri, out resource))
            {
                lock (_lock)
                {
                    if (!Resources.TryGetValue(urlWithoutSessionId.AbsoluteUri, out resource))
                    {
                        resource             = new Resource(urlWithoutSessionId, ResourceBehavior.Ignore);
                        resource.ContentType = initialContentType;
                        IBehaviorRule behaviorRule = _behaviorRules.GetBehaviorRule(resource);
                        resource.Behavior = behaviorRule == null ? ResourceBehavior.Ignore : behaviorRule.Behavior;
                        Resources.Add(urlWithoutSessionId.AbsoluteUri, resource);
                        Context.Resources.Add(resource);

                        // En fonction du behavior et de la limitation de ressource, on décide
                        // si une ressource devra être traitée ou non.
                        if (resource.Behavior != ResourceBehavior.Ignore && (!_limitResources.HasValue || _limitResources > 0))
                        {
                            if (_limitResources.HasValue)
                            {
                                _limitResources--;
                            }

                            behaviorRule.TargetBucket.QueueItem(resource);
                            resource.CurrentBucket = behaviorRule.TargetBucket.Name;
                        }
                        else
                        {
                            resource.Status        = ResourceStatus.Ignored;
                            resource.CurrentBucket = null;
                        }
                    }
                }
            }
            return(resource);
        }