private void OnDeferedWriteTimerElapsedEvent(object sender, System.Timers.ElapsedEventArgs e) { try { lock (_deferredWriteTimers) { DeferedWritetimer timer = (DeferedWritetimer)sender; DeferedWritetimer timerOut; _deferredWriteTimers.TryRemove(timer.Node.IeeeAddress, out timerOut); _nodesToSave.Add(timer.Node); } } catch (Exception ex) { Log.Debug(ex, "Data store: error in timer elapsed event"); } }
private void SaveNode(ZigBeeNode node) { int deferredDelay = _deferredWriteTime; lock (_deferredWriteTimers) { DeferedWritetimer timer; if (_deferredWriteTimers.TryGetValue(node.IeeeAddress, out timer)) { if (DateTime.Now - timer.CreatedTime > TimeSpan.FromMilliseconds(_deferredWriteTimeout)) { Log.Debug("{IeeeAddress}: Data store: Maximum deferred time reached.", node.IeeeAddress); // Run the write immediately. deferredDelay = 1; } timer.Interval = deferredDelay; timer.Start(); } else { // First deferred write - save the time timer = new DeferedWritetimer(); timer.Node = node; timer.CreatedTime = DateTime.Now; timer.AutoReset = false; timer.Interval = deferredDelay; timer.Elapsed += new ElapsedEventHandler(OnDeferedWriteTimerElapsedEvent); _deferredWriteTimers.TryAdd(node.IeeeAddress, timer); timer.Start(); } Log.Debug("{IeeeAddress}: Data store: Deferring write for {deferredDelay}ms.", node.IeeeAddress, deferredDelay); } }