public SilentTimer(TimeSpan time, PollManagerCompleteHandler complete, SilentTimerTimeElapsedEventHandler elapsed) { Complete = complete; System.Timers.Timer silentTimer = new System.Timers.Timer(time.TotalMilliseconds); silentTimer.Elapsed += delegate(object sender, ElapsedEventArgs e) { silentTimer.Stop(); elapsed(this); }; silentTimer.Start(); }
private void Poll(PollManagerCompleteHandler complete) { RequestProducer = new PrismRequestProducer(new List<string> { Unit.Settings.CommonEndpoint }); PollProducer = new PrismPollProducer(Unit.Settings.PollEndpoint); PollDoneEvent = new ManualResetEvent(false); PollThread = new Thread(delegate() { List<ProducerChannel> pollingChannelList = new List<ProducerChannel>(); List<ProducerChannel> pollingAlarmList = new List<ProducerChannel>(); int TotalChannelCount = 0; int SuccessChannelCount = 0; PollDoneEvent.Reset(); RequestProducer.GetChannelList("alarm", delegate(string error0, List<ProducerChannel> channels) { if (PollThreadAborted) { PollDoneEvent.Set(); return; } if (error0 == null) { List<string> expiredAlarms = new List<string>(Alarms.Keys); foreach (var channel in channels) { if (!channel.Channel.Contains("-manual")) { expiredAlarms.Remove(String.Format("{0},{1}", channel.Group, channel.Channel)); pollingAlarmList.Add(channel); } } foreach (var alarmKey in expiredAlarms) { ResetChannel(alarmKey); } PollDoneEvent.Set(); } else { System.Diagnostics.Debug.WriteLine(error0.ToString()); } }); PollDoneEvent.WaitOne(); if (PollThreadAborted) { return; } PollDoneEvent.Reset(); RequestProducer.GetChannelList("io", delegate(string error0, List<ProducerChannel> channels) { if (PollThreadAborted) { PollDoneEvent.Set(); return; } if (error0 == null) { List<string> expiredChannels = new List<string>(Values.Keys); foreach (var channel in channels) { expiredChannels.Remove(String.Format("{0},{1}", channel.Group, channel.Channel)); pollingChannelList.Add(channel); } foreach (var channelKey in expiredChannels) { ResetChannel(channelKey); } PollDoneEvent.Set(); } else { System.Diagnostics.Debug.WriteLine(error0.ToString()); } }); PollDoneEvent.WaitOne(); if (PollThreadAborted) { return; } TotalChannelCount += pollingAlarmList.Count; TotalChannelCount += pollingChannelList.Count; PollDoneEvent.Reset(); PollProducer.Enqueue(pollingAlarmList, delegate(string error1, List<ProducerChannelValue> alarmValueList) { foreach (var value in alarmValueList) { UpdateChannel(value); } SuccessChannelCount += alarmValueList.Count; PollProducer.Enqueue(pollingChannelList, delegate(string error2, List<ProducerChannelValue> channelValueList) { foreach (var value in channelValueList) { UpdateChannel(value); } SuccessChannelCount += channelValueList.Count; PollDoneEvent.Set(); }); }); PollDoneEvent.WaitOne(); if (PollThreadAborted) { return; } bool newOnlineState = ((double)SuccessChannelCount / (double)TotalChannelCount > 0.85f); if (lastOnlineState != newOnlineState) { lastOnlineState = newOnlineState; if (ProcessingOnlineStateChangedEvent != null) { ProcessingOnlineStateChangedEvent(this, lastOnlineState); } } if (SuccessChannelCount == TotalChannelCount) { UpdateTimer.Interval = 300000; } else { UpdateTimer.Interval = 30000; } UpdateTimer.Start(); complete(); RequestProducer.Terminate(); PollProducer.Terminate(); RequestProducer = null; PollProducer = null; PollDoneEvent = null; PollThread = null; }); PollThread.Start(); }
public void Silent(TimeSpan time, PollManagerCompleteHandler compelete) { if (SilentTimers.Count == 0 && PollManagerPauseEvent != null) { PollManagerPauseEvent(this); } SilentTimers.Add(new SilentTimer(time, compelete, SilentTimerElapsed)); }