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