Example #1
0
            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();
            }
Example #2
0
        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();
        }
Example #3
0
        public void Silent(TimeSpan time, PollManagerCompleteHandler compelete)
        {
            if (SilentTimers.Count == 0 && PollManagerPauseEvent != null)
            {
                PollManagerPauseEvent(this);
            }

            SilentTimers.Add(new SilentTimer(time, compelete, SilentTimerElapsed));
        }