Exemplo n.º 1
0
        private void DataPublishingLoop(int interval)
        {
            Task.Run(async delegate
            {
                LocalRepository localRepository = LocalRepository.GetInstance();

                try
                {
                    while (true)
                    {
                        bool send = false;

                        MsgWaterTankData[] msgsDataWaterTank = new MsgWaterTankData[2];
                        for (int i = 0; i < localRepository.Tanks.Length; i++)
                        {
                            WaterTank waterTank  = localRepository.Tanks[i];
                            msgsDataWaterTank[i] = new MsgWaterTankData(waterTank.Level, waterTank.MinLevel);
                            send |= waterTank.Changed;
                            waterTank.Changed = false;
                        }

                        if (send)
                        {
                            PublishDataWaterTank(msgsDataWaterTank);
                        }

                        if (localRepository.Pump.Changed)
                        {
                            MsgPumpData msg = new MsgPumpData(localRepository.Pump.Status, localRepository.Pump.OperationMode);
                            PublishDataPump(msg);
                            localRepository.Pump.Changed = false;
                        }

                        for (int i = 0; i < localRepository.ProcessChart.Data.Count; i++)
                        {
                            if (localRepository.ProcessChart.Changed)
                            {
                                MsgChartData msg = new MsgChartData();
                                msg.Data         = localRepository.ProcessChart.Data;
                                PublishChart(msg);
                            }
                        }

                        await Task.Delay(interval);
                    }
                }
                catch (Exception exc)
                {
                    //TODO: Implementar framework de log
                }
            });
        }
Exemplo n.º 2
0
        public void UpdateChart(MsgChartData msg)
        {
            if (!btnRealtime.IsOn)
            {
                return;
            }

            MethodInvoker mth = (MethodInvoker) delegate()
            {
                try
                {
                    if (_IndexLastRenderedPoint > msg.Data.Count)
                    {
                        ClearChart();
                    }

                    while (_IndexLastRenderedPoint < msg.Data.Count)
                    {
                        ProcessChartData data = msg.Data[_IndexLastRenderedPoint];
                        if (_IndexLastRenderedPoint >= chtLevel.Series["Level1"].Points.Count)
                        {
                            chtLevel.Series["Level1"].Points.AddXY(data.SampleDate, data.Level[0]);
                            chtLevel.Series["Level2"].Points.AddXY(data.SampleDate, data.Level[1]);
                        }
                        ++_IndexLastRenderedPoint;
                    }
                }
                catch (Exception e)
                {
                    txtMsg.Text = e.Message;
                }
            };

            if (!this.IsHandleCreated)
            {
                mth.Invoke();
            }
            else
            {
                this.BeginInvoke(mth);
            }
        }
Exemplo n.º 3
0
 private void PublishChart(MsgChartData msg)
 {
     Program.FrmMain.UpdateChart(msg);
 }