/// <summary> /// Stop managing an appender /// </summary> /// <param name="alivecall">callback to be released</param> public void Release(AliveCall alivecall) { lock (m_control_locker) { lock (m_calls_locker) { m_calls.Remove(alivecall); } Monitor.PulseAll(m_control_locker); } }
/// <summary> /// Let a callback be called by KeepAlive regularly; /// </summary> /// <param name="alivecall">callback to be called</param> /// <param name="interval">how often</param> public void Manage(AliveCall alivecall, int interval) { lock (m_control_locker) { lock (m_calls_locker) { m_calls[alivecall] = MakeConfig(alivecall, interval); } if (!m_stop) { Start(); } Monitor.PulseAll(m_control_locker); } }
/// <summary> /// Let a callback be called by KeepAlive regularly; /// </summary> /// <param name="alivecall">callback to be called</param> /// <param name="interval">how often</param> public void Manage(AliveCall alivecall, int interval) { lock (m_control_locker) { lock (m_calls_locker) { m_calls[alivecall] = MakeConfig(alivecall, interval); } // ensure we have the right repo if config changed m_rep = LogManager.GetRepository(typeof(KeepAlive).Assembly); if (!m_stop) { Start(); } Monitor.PulseAll(m_control_locker); } }
Config MakeConfig(AliveCall alivecall, int interval) { var config = new Config() { Interval = interval, Schedule = DateTime.Today, Call = alivecall }; if (config.Interval <= 0) { config.Interval = 60000; } while (config.Offset == 0) { config.Offset = new Random((int)(DateTime.Now.Ticks % int.MaxValue)).Next(config.Interval); } return(config); }