示例#1
0
文件: Utility.cs 项目: wren11/server
        public bool IsSquelched(Object obj = null)
        {
            var now = DateTime.Now.Ticks;

            ClearExpiredSquelches();

            if (obj == null)
            {
                obj = String.Empty;
            }

            if (SquelchedObjects.ContainsValue(obj))
            {
                return(true);
            }

            Tuple <int, long> seen;

            if (SeenObjects.TryGetValue(obj, out seen))
            {
                // Item1 = count, Item2 = last seen
                var elapsed = new TimeSpan(now - seen.Item2);
                if (elapsed.TotalMilliseconds > Throttle.SquelchWithin)
                {
                    Logger.Info("SeenObjects being reset with new tuple");
                    SeenObjects[obj] = new Tuple <int, long>(0, now);
                }
                else
                {
                    if (seen.Item1 + 1 >= Throttle.SquelchCount)
                    {
                        // Squelched
                        Logger.Info("Squelched");
                        SquelchedObjects[now] = obj;
                        return(true);
                    }
                    else
                    {
                        SeenObjects[obj] = new Tuple <int, long>(seen.Item1 + 1, now);
                    }
                }
            }
            else
            {
                SeenObjects[obj] = new Tuple <int, long>(0, now);
            }
            return(false);
        }
示例#2
0
文件: Utility.cs 项目: wren11/server
        private void ClearExpiredSquelches()
        {
            var now = DateTime.Now.Ticks;

            Logger.InfoFormat("Clearing expired squelches");

            var keys = new List <long>(SquelchedObjects.Keys);

            foreach (var when in keys)
            {
                var span = new TimeSpan(now - when);
                if (span.TotalMilliseconds > Throttle.SquelchDuration)
                {
                    Logger.InfoFormat("Removing squelched entry");
                    SquelchedObjects.Remove(when);
                }
                else
                {
                    break;
                }
            }
        }