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); } }
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"); } } }