예제 #1
0
        internal override void publishRoomUpdate(Room r, EventType e)
        {
            AvgBucket ab;

            if (e == EventType.Appear)
            {
                ab = new AvgBucket();
                lock (ab)
                {
                    ab.fiveminutestotal = 0;
                    ab.onesecond        = 0;
                    ab.room             = r;
                    ab.count            = 0;
                    ab.dirty            = true;
                    ab.fiveminutelast   = DateTime.Now;
                }
                stats.TryAdd(r, ab);
            }
            else if (e == EventType.Disappear)
            {
                stats.TryRemove(r, out ab);
                updateRoomStat(ab, ab.onesecond, DateTime.Now);
                foreach (Publisher pb in propagate)
                {
                    pb.publishStat(ab.count > 0?ab.fiveminutestotal / ab.count:0, ab.room, DateTime.Now, StatType.FiveMinuteAverageDeviceCount);
                }
            }
        }
예제 #2
0
 private void updateRoomStat(AvgBucket ab, double instantaneousPeopleCount, DateTime statTime)
 {
     lock (ab)
     {
         ab.onesecond = instantaneousPeopleCount;
         ab.dirty     = true;
     }
 }