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); } } }
private void updateRoomStat(AvgBucket ab, double instantaneousPeopleCount, DateTime statTime) { lock (ab) { ab.onesecond = instantaneousPeopleCount; ab.dirty = true; } }