Exemple #1
0
        /// <summary>
        /// проверка активности сенсоров
        /// </summary>
        public void CheckActivitySensor()
        {
            try
            {
                CoreICSM.Logs.CLogs.WriteInfo(ELogsWhat.Unknown, "CheckActivitySensor ");
                ClassDBGetSensor    gsd        = new ClassDBGetSensor();
                BusManager <Sensor> busManager = new BusManager <Sensor>();
                ClassDBGetSensor    DB         = new ClassDBGetSensor();
                List <Sensor>       L_S        = DB.LoadObjectAllSensor();
                DB.Dispose();
                if (L_S != null)
                {
                    if (L_S.Count > 0)
                    {
                        foreach (Sensor message in L_S.ToArray())
                        {
                            busManager.SendDataObject(message, GlobalInit.Template_Event_CheckActivitySensor_Req + message.Name + message.Equipment.TechId, XMLLibrary.BaseXMLConfiguration.xml_conf._TimeExpirationTemp.ToString());
                        }
                    }
                }
                {
                    foreach (Sensor message in GlobalInit.SensorListSDRNS.ToArray())
                    {
                        if (GlobalInit.Lst_timers.Find(t => t.se.Name == message.Name && t.se.Equipment.TechId == message.Equipment.TechId) == null)
                        {
                            Mdx RW = new Mdx(message);
                            GlobalInit.Lst_timers.Add(RW);
                        }
                    }
                    foreach (Mdx se in GlobalInit.Lst_timers.ToArray())
                    {
                        if (ClassStaticBus.bus.Advanced.IsConnected)
                        {
                            uint MessCount = busManager.GetMessageCount(GlobalInit.Template_Event_CheckActivitySensor_Resp + se.se.Name + se.se.Equipment.TechId);
                            for (int i = 0; i < MessCount; i++)
                            {
                                var message_x = busManager.GetDataObject(GlobalInit.Template_Event_CheckActivitySensor_Resp + se.se.Name + se.se.Equipment.TechId);
                                if (message_x != null)
                                {
                                    if ((message_x as Sensor).Name == se.se.Name && (message_x as Sensor).Equipment.TechId == se.se.Equipment.TechId)
                                    {
                                        se.Cnt_sensor_New++; se.Cnt_timer = 0; se.Cnt_all_time = 0;
                                        Sensor f = GlobalInit.SensorListSDRNS.Find(t => t.Name == se.se.Name && t.Equipment.TechId == se.se.Equipment.TechId);
                                        if (f != null)
                                        {
                                            se.Cnt_sensor_New++; f.Status = "A"; se.Cnt_timer = 0; se.Cnt_all_time = 0; se.Cnt_sensor_Old = 0; se.BZ.Close(); se.BZ.Start(); gsd.UpdateStatusSensor(f);
                                        }
                                        else
                                        {
                                            se.Cnt_timer = 0; se.Cnt_all_time = 0; se.Cnt_sensor_New = 0;
                                        }
                                    }
                                }
                                else
                                {
                                    break;
                                }
                            }

                            /*
                             * GlobalInit.Lds_Activity_Sensor_Receiver.Add(ClassStaticBus.bus.Receive(GlobalInit.Template_Event_CheckActivitySensor_Resp + se.se.Name + se.se.Equipment.TechId, x => x
                             *  .Add<Sensor>(message_x =>
                             *  {
                             *      if (message_x.Name == se.se.Name && message_x.Equipment.TechId == se.se.Equipment.TechId) {
                             *          se.Cnt_sensor_New++; se.Cnt_timer = 0; se.Cnt_all_time = 0;
                             *          Sensor f = GlobalInit.SensorListSDRNS.Find(t => t.Name == se.se.Name && t.Equipment.TechId == se.se.Equipment.TechId);
                             *          if (f != null) {
                             *              se.Cnt_sensor_New++; f.Status = "A"; se.Cnt_timer = 0; se.Cnt_all_time = 0; se.Cnt_sensor_Old = 0; se.BZ.Close(); se.BZ.Start(); gsd.UpdateStatusSensor(f);
                             *          }
                             *          else {
                             *              se.Cnt_timer = 0; se.Cnt_all_time = 0; se.Cnt_sensor_New = 0;
                             *          }
                             *      }
                             *  })));
                             */
                        }
                        else
                        {
                            ClassStaticBus.bus.Dispose();
                            GC.SuppressFinalize(ClassStaticBus.bus);
                            ClassStaticBus.bus = RabbitHutch.CreateBus(GlobalInit.MainRabbitMQServices);
                            CoreICSM.Logs.CLogs.WriteInfo(CoreICSM.Logs.ELogsWhat.Unknown, "-> Bus dispose... ");
                        }

                        Sensor fc = GlobalInit.SensorListSDRNS.Find(t => t.Name == se.se.Name && t.Equipment.TechId == se.se.Equipment.TechId);
                        if (fc != null)
                        {
                            if ((se.Cnt_timer >= BaseXMLConfiguration.xml_conf._CheckActivitySensor) && (se.Cnt_all_time < BaseXMLConfiguration.xml_conf._MaxTimeNotActivateStatusSensor))
                            {
                                if (ClassStaticBus.bus.Advanced.IsConnected)
                                {
                                    busManager.SendDataObject(se.se, GlobalInit.Template_Event_CheckActivitySensor_Req + se.se.Name + se.se.Equipment.TechId, XMLLibrary.BaseXMLConfiguration.xml_conf._TimeExpirationTask.ToString());
                                    uint MessCount = busManager.GetMessageCount(GlobalInit.Template_Event_CheckActivitySensor_Resp + se.se.Name + se.se.Equipment.TechId);
                                    for (int i = 0; i < MessCount; i++)
                                    {
                                        var message_x = busManager.GetDataObject(GlobalInit.Template_Event_CheckActivitySensor_Resp + se.se.Name + se.se.Equipment.TechId);
                                        if (message_x != null)
                                        {
                                            if ((message_x as Sensor).Name == se.se.Name && (message_x as Sensor).Equipment.TechId == se.se.Equipment.TechId)
                                            {
                                                se.Cnt_sensor_New++;
                                                se.Cnt_timer      = 0;
                                                se.Cnt_all_time   = 0;
                                                se.Cnt_sensor_Old = 0;
                                                se.BZ.Close();
                                                se.BZ.Start();
                                            }
                                            else
                                            {
                                                break;
                                            }
                                        }
                                    }

                                    /*
                                     * GlobalInit.Lds_Activity_Sensor_Receiver.Add(ClassStaticBus.bus.Receive(GlobalInit.Template_Event_CheckActivitySensor_Resp + se.se.Name + se.se.Equipment.TechId, x => x
                                     *      .Add<Sensor>(message_x =>
                                     *      {
                                     *          if (message_x.Name == se.se.Name && message_x.Equipment.TechId == se.se.Equipment.TechId) {
                                     *              se.Cnt_sensor_New++;
                                     *              se.Cnt_timer = 0;
                                     *              se.Cnt_all_time = 0;
                                     *              se.Cnt_sensor_Old = 0;
                                     *              se.BZ.Close();
                                     *              se.BZ.Start();
                                     *
                                     *          }
                                     *      })));
                                     */
                                }
                                else
                                {
                                    ClassStaticBus.bus.Dispose();
                                    GC.SuppressFinalize(ClassStaticBus.bus);
                                    ClassStaticBus.bus = RabbitHutch.CreateBus(GlobalInit.MainRabbitMQServices);
                                    CoreICSM.Logs.CLogs.WriteInfo(CoreICSM.Logs.ELogsWhat.Unknown, "-> Bus dispose... ");
                                }
                                fc.Status         = AllStatusSensor.F.ToString();
                                se.Cnt_timer      = 0;
                                se.Cnt_sensor_New = 0;
                                gsd.UpdateStatusSensor(fc);
                            }
                            else if ((se.Cnt_all_time >= BaseXMLConfiguration.xml_conf._MaxTimeNotActivateStatusSensor))
                            {
                                bool isCheck = false;
                                if (ClassStaticBus.bus.Advanced.IsConnected)
                                {
                                    busManager.SendDataObject(se.se, GlobalInit.Template_Event_CheckActivitySensor_Req + se.se.Name + se.se.Equipment.TechId, XMLLibrary.BaseXMLConfiguration.xml_conf._TimeExpirationTask.ToString());
                                    uint MessCount = busManager.GetMessageCount(GlobalInit.Template_Event_CheckActivitySensor_Resp + se.se.Name + se.se.Equipment.TechId);
                                    for (int i = 0; i < MessCount; i++)
                                    {
                                        var message_x = busManager.GetDataObject(GlobalInit.Template_Event_CheckActivitySensor_Resp + se.se.Name + se.se.Equipment.TechId);
                                        if (message_x != null)
                                        {
                                            if ((message_x as Sensor).Name == se.se.Name && (message_x as Sensor).Equipment.TechId == se.se.Equipment.TechId)
                                            {
                                                se.Cnt_sensor_New++; se.Cnt_timer = 0; se.Cnt_all_time = 0; se.Cnt_sensor_Old = 0; se.BZ.Close(); se.BZ.Start();
                                                isCheck = true;
                                            }
                                            else
                                            {
                                                break;
                                            }
                                        }
                                    }

                                    /*
                                     * GlobalInit.Lds_Activity_Sensor_Receiver.Add(ClassStaticBus.bus.Receive(GlobalInit.Template_Event_CheckActivitySensor_Resp + se.se.Name + se.se.Equipment.TechId, x => x
                                     *  .Add<Sensor>(message_x =>
                                     *  {
                                     *      if (message_x.Name == se.se.Name && message_x.Equipment.TechId == se.se.Equipment.TechId) {
                                     *          se.Cnt_sensor_New++; se.Cnt_timer = 0; se.Cnt_all_time = 0; se.Cnt_sensor_Old = 0; se.BZ.Close(); se.BZ.Start();
                                     *          isCheck = true;
                                     *      }
                                     *  })));
                                     */
                                }
                                else
                                {
                                    ClassStaticBus.bus.Dispose();
                                    GC.SuppressFinalize(ClassStaticBus.bus);
                                    ClassStaticBus.bus = RabbitHutch.CreateBus(GlobalInit.MainRabbitMQServices);
                                    CoreICSM.Logs.CLogs.WriteInfo(CoreICSM.Logs.ELogsWhat.Unknown, "-> Bus dispose... ");
                                }
                                if (!isCheck)
                                {
                                    busManager.DeleteQueue(GlobalInit.Template_Event_CheckActivitySensor_Req + se.se.Name + se.se.Equipment.TechId);
                                }
                                if (!isCheck)
                                {
                                    se.Cnt_sensor_Old++;
                                }
                                if ((se.Cnt_sensor_New == 0) || (se.Cnt_sensor_Old > 2))
                                {
                                    //------------ ДАННЫЙ МЕХАНИЗМ ПОКА ДЕАКТИВИРУЕМ (ПО ПРИЧИНЕ ИСПОЛЬЗОВАНИЯ СЕРВЕРА СТОРОННЕЙ ОРГАНИЗАЦИЕЙ) ----------------------
                                    //------------ т.е. сенсор не должен удаляться из БД (он может быть активен или неактивен)
                                    //fc.Status = AllStatusSensor.Z.ToString(); se.Cnt_timer = 0; se.Cnt_all_time = 0; se.Cnt_sensor_New = 0; se.Cnt_sensor_Old = 0;
                                    //gsd.UpdateStatusSensor(fc);
                                    //GlobalInit.SensorListSDRNS.RemoveAll(t => t.Name == fc.Name && t.Equipment.TechId == fc.Equipment.TechId);
                                    //se.BZ.Stop();
                                    //----------------------------------


                                    se.Cnt_timer = 0; se.Cnt_all_time = 0; se.Cnt_sensor_New = 0; se.Cnt_sensor_Old = 0;
                                    se.BZ.Stop();
                                    busManager.DeleteQueue(GlobalInit.Template_Event_CheckActivitySensor_Req + se.se.Name + se.se.Equipment.TechId);
                                }
                            }
                        }
                    }
                }
                gsd.Dispose();
            }
            catch (Exception ex)
            {
                Console.WriteLine("--> Error execute proc CheckActivitySensor " + ex.Message);
            }
        }