예제 #1
0
        private void VisitedPage(object sender, CriterionEventArgs e)
        {
            var page = _contentLoader.Get <IContent>(e.GetPageLink());

            if (!(page is ICategorizableContent categorizable))
            {
                return;
            }
            var pageCatIds = categorizable.Categories?.Select(x => x.ID);

            if (_stateStorage.IsAvailable && pageCatIds != null && pageCatIds.Contains(int.Parse(Model.CategoryId)))
            {
                var times = GetVisitedTimes() + 1;
                _stateStorage.Save(_STORAGEKEY, times);
            }
        }
예제 #2
0
        private void PulseSessionStartHandler(object sender, CriterionEventArgs e)
        {
            var locker = LockingSingleton.GetInstance();

            if (Monitor.TryEnter(locker.lockObj))
            {
                try
                {
                    if (!locker.isLocked)
                    {
                        locker.isLocked = true;

                        Debug.WriteLine("PulseSessionStartHandler(): START");

                        string ip = IpHelper.GetIPAddress(new HttpRequestWrapper(HttpContext.Current.Request));

                        Debug.WriteLine("PulseSessionStartHandler(): IP:" + ip);

                        CoordinatesModel coordinates = GeoLocationHelper.GetCoordinatesFromIp(IPAddress.Parse(ip));
                        if (coordinates == null)
                        {
                            e.HttpContext.Session["pulse_segments"] = new string[0];
                            locker.isLocked = false;
                            return;
                        }

                        QueryPulse(coordinates, e.HttpContext.Session, locker);

                        Debug.WriteLine("PulseSessionStartHandler(): END");
                    }
                    else
                    {
                        Debug.WriteLine("PulseSessionStartHandler(): Another thread already started");
                    }
                }
                finally
                {
                    // Ensure that the lock is released.
                    Monitor.Exit(locker.lockObj);
                    Debug.WriteLine("PulseSessionStartHandler(): Lock released");
                }
            }
        }