예제 #1
0
        /// <summary>
        /// 心跳线程
        /// </summary>
        private void Heart()
        {
            while (CommonFunction.flag_listener)
            {
                lock (CommonFunction.obj_66)
                {
                    foreach (HeartInfo hi in CommonFunction.hearts.Values)
                    {
                        try
                        {
                            if (hi.Ke_al > 3)
                            {
                                hi.State = "异常";
                                hi.Ke_al = 00;
                                Showmsg(hi.Id + "/" + hi.Type);

                                //Thread me = new Thread(() => Message_f(hi))
                                //{
                                //    IsBackground = true
                                //};
                                //me.Start();
                                hi.State = "禁用";
                                //修改检测平台状态为异常
                                switch (hi.Type)
                                {
                                case "命令检测":
                                    Myadapter_p.UpdatePlatCom("异常", hi.Id);
                                    break;

                                case "IC卡卡控":
                                    Myadapter_p.UpdatePlatIc("异常", hi.Id);
                                    break;

                                case "膜式表初检":
                                    Myadapter_p.UpdatePlatChu_msb("异常", hi.Id);
                                    break;

                                case "修正仪初检":
                                    Myadapter_p.UpdatePlatChu_xzy("异常", hi.Id);
                                    break;

                                case "超声波初检":
                                    Myadapter_p.UpdatePlatChu_csb("异常", hi.Id);
                                    break;

                                case "终检":
                                    Myadapter_p.UpdatePlatZho("异常", hi.Id);
                                    break;
                                }
                                Thread.Sleep(50);
                                CommonFunction.platm.ChangePlat();
                                PostLl(hi.Id.ToString(), hi.Type, "异常");
                                DT_WaringPlatTableAdapter myadapter_wp = new DT_WaringPlatTableAdapter();
                                DataTable dtw = myadapter_wp.GetDataBy_it(hi.Id.ToString(), hi.Type, 0);
                                if (dtw.Rows.Count == 0)
                                {
                                    myadapter_wp.InsertWP(hi.Id.ToString(), hi.Type, DateTime.Now, 0, 0);
                                }
                                else
                                {
                                    myadapter_wp.UpdateMP(0, DateTime.Now, hi.Type, hi.Id.ToString(), 0);
                                }
                                //异常,给ll推送异常,修改检测平台状态为异常
                            }
                            if (hi.State.Equals("正常"))
                            {
                                try
                                {
                                    Debug.Print("2");
                                    if (CommonFunction.flag_listener)
                                    {
                                        Socket    socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                                        IPAddress ip     = IPAddress.Parse(hi.IP);
                                        int       port   = Convert.ToInt32(hi.Port);
                                        socket.Connect(ip, port);
                                        string s = DownCommond.GenerateCorekeep();
                                        socket.Send(DataHelper.Str2Byte(s));
                                        socket.Close();
                                    }
                                }
                                catch (Exception)
                                {
                                    Debug.Print("3");
                                    LogHelper.Info("检测平台异常");
                                }
                                hi.Ke_al++;
                            }
                            Thread.Sleep(500);
                        }
                        catch (Exception)
                        {
                            hi.Ke_al++;
                            //此处应警报,没有办法发送心跳包
                        }
                    }
                }
                Debug.Print("1");
                Thread.Sleep(10000);
            }
        }