Esempio n. 1
0
        //----------------------------------------------------------------------------------------------
        // Réception des notifications d'alarmes ici
        void m_recepteurAlarme_Notification(IDonneeNotification donnee)
        {
            CDonneeNotificationAlarmes donneeAlarme = donnee as CDonneeNotificationAlarmes;

            if (donneeAlarme == null)
            {
                return;
            }


            CEvenementAlarm[] lstAlarmes = donneeAlarme.Alarmes;
            foreach (CEvenementAlarm evAlarme in lstAlarmes)
            {
                if (evAlarme is CEvenementAlarmStartStop)
                {
                    CEvenementAlarmStartStop evtAlarmStartStop = (CEvenementAlarmStartStop)evAlarme;
                    if (evtAlarmStartStop.Gravite == EGraviteAlarmeAvecMasquage.EndAlarm)
                    {
                        if (evtAlarmStartStop.IdAlarmData > 0)
                        {
                            int nIdAlarmeData = evtAlarmStartStop.IdAlarmData;
                            StopAlarme(nIdAlarmeData);
                        }
                    }
                    else
                    {
                        StartAlarme(new CInfoAlarmeAffichee(evtAlarmStartStop));
                    }
                }
                else if (evAlarme is CEvenementAlarmMasqueeParUneAutre)
                {
                    CEvenementAlarmMasqueeParUneAutre evenementAlarm =
                        (CEvenementAlarmMasqueeParUneAutre)evAlarme;

                    //if (evenementAlarm.AlarmStartId > 0)
                    //    StopAlarme(evenementAlarm.AlarmStartId);
                    if (evenementAlarm.IdAlarmeData > 0)
                    {
                        StopAlarme(evenementAlarm.IdAlarmeData);
                    }
                }
                else if (evAlarme is CEvenementAlarmMask)
                {
                    CEvenementAlarmMask evenementAlarm = (CEvenementAlarmMask)evAlarme;
                    if (evenementAlarm.IdLienAccesAlarme > 0)
                    {
                        MaskAlarme(evenementAlarm);
                    }
                }
            }
            List <CInfoElementDeSchemaSupervise> lstConcernes = new List <CInfoElementDeSchemaSupervise>();

            OnChangementDansLaBase(lstConcernes);
        }
Esempio n. 2
0
        void OnReceiveNotificationAlarmEnCours(IDonneeNotification donnee)
        {
            CDonneeNotificationAlarmes donneeAlarme = donnee as CDonneeNotificationAlarmes;

            if (donneeAlarme == null)
            {
                return;
            }
            CEvenementAlarm[] lstAlarmes = donneeAlarme.Alarmes;
            foreach (CEvenementAlarm evAl in lstAlarmes)
            {
                if (evAl is CEvenementAlarmStartStop)
                {
                    CEvenementAlarmStartStop evAlarme = (CEvenementAlarmStartStop)evAl;

                    if (IsFrequentAlarm(evAlarme))
                    {
                        MAJFrequentButtonText();
                        continue;
                    }

                    CInfoAlarmeAffichee infoAlarm = new CInfoAlarmeAffichee(evAlarme);
                    if (m_consultationEnCours.Parametres.FormuleFiltre != null)
                    {
                        CContexteEvaluationExpression contexte = new CContexteEvaluationExpression(infoAlarm);
                        CResultAErreur result = m_consultationEnCours.Parametres.FormuleFiltre.Eval(contexte);
                        if (!Convert.ToBoolean(result.Data))
                        {
                            continue;
                        }
                    }

                    if (evAlarme.Gravite == EGraviteAlarmeAvecMasquage.EndAlarm &&
                        evAlarme.IdAlarmeDebut > 0)
                    {
                        for (int i = 0; i < m_lstViewEnCours.GetCount(); i++)
                        {
                            infoAlarm = (CInfoAlarmeAffichee)m_lstViewEnCours.GetObjectFromList(i);
                            if (infoAlarm != null && infoAlarm.IdSpvEvtAlarme == evAlarme.IdAlarmeDebut)
                            {
                                if (m_consultationEnCours.Parametres.DelaiMasquageTerminnees > 0)
                                {
                                    infoAlarm.DateEffacement = DateTime.Now.AddMinutes(m_consultationEnCours.Parametres.DelaiMasquageTerminnees);
                                }

                                m_lstViewEnCours.RemoveObjet(infoAlarm);
                                infoAlarm.DateFin = evAlarme.DateEvenementAlarme;
                                m_lstViewRetombe.AddObject(infoAlarm, CSpvWin32Registre.TriConsultationAlarmeCroissant);
                                break;
                            }
                        }
                    }
                    else
                    {
                        m_lstViewEnCours.AddObject(new CInfoAlarmeAffichee(evAlarme),
                                                   CSpvWin32Registre.TriConsultationAlarmeCroissant);
                        SetVoyantAlarme();
                    }
                }
                else if (evAl is CEvenementAlarmMasqueeParUneAutre)
                {
                    for (int i = 0; i < m_lstViewEnCours.GetCount(); i++)
                    {
                        CInfoAlarmeAffichee infoAlarm = (CInfoAlarmeAffichee)m_lstViewEnCours.GetObjectFromList(i);

                        if (infoAlarm != null && infoAlarm.IdSpvEvtAlarme ==
                            ((CEvenementAlarmMasqueeParUneAutre)evAl).AlarmStartId)
                        {
                            m_lstViewEnCours.RemoveObjet(infoAlarm);
                            //            infoAlarm.DateFin = evAlarme.EventAlarmRetombee.StopAlarmDate;
                            //            m_lstViewRetombe.AddObject(infoAlarm);
                            break;
                        }
                    }
                }
                else if (evAl is CEvenementAlarmMask)
                {
                    CEvenementAlarmMask evAlarme = (CEvenementAlarmMask)evAl;

                    if (evAlarme.NiveauMasquage != EMasquage.NonMasque)
                    {
                        if (evAlarme.LocalName == (new CMaskedBy(EMaskedBy.Administrateur)).Libelle)
                        {
                            m_NbMaskAdm++;
                        }
                        else
                        {
                            m_NbMaskBrig++;
                        }
                    }
                    else
                    {
                        if (evAlarme.LocalName == (new CMaskedBy(EMaskedBy.Administrateur)).Libelle)
                        {
                            m_NbMaskAdm--;
                        }
                        else
                        {
                            m_NbMaskBrig--;
                        }
                    }


                    MAJAdminButtonText();
                    MAJBrigButtonText();
                }
                else if (evAl is CEvenementAlarmAcknowledge)
                {
                    CEvenementAlarmAcknowledge evAlarme = (CEvenementAlarmAcknowledge)evAl;
                    if (evAlarme.IdAlarmeAcquittee == 0)                                 // Acquittement de liste
                    {
                        if (evAlarme.IdListeAlarmeAcquittee == m_consultationEnCours.Id) // Cette liste
                        {
                            TraiteAquitteAlarmes();
                        }
                    }
                    else
                    {       // Acquittement d'une alarme précise
                        bool bTrouve = false;
                        for (int i = 0; i < m_lstViewEnCours.GetCount(); i++)
                        {
                            CInfoAlarmeAffichee infoAlarm = (CInfoAlarmeAffichee)m_lstViewEnCours.GetObjectFromList(i);
                            if (infoAlarm != null && infoAlarm.IdSpvEvtAlarme == evAlarme.IdAlarmeAcquittee)
                            {
                                infoAlarm.EstAcquittee = true;
                                bTrouve = true;
                                break;
                            }
                        }
                        if (!bTrouve)   // l'alarme doit être dans les retombées
                        {
                            for (int i = 0; i < m_lstViewRetombe.GetCount(); i++)
                            {
                                CInfoAlarmeAffichee infoAlarm = (CInfoAlarmeAffichee)m_lstViewRetombe.GetObjectFromList(i);
                                if (infoAlarm != null && infoAlarm.IdSpvEvtAlarme == evAlarme.IdAlarmeAcquittee)
                                {
                                    infoAlarm.EstAcquittee = true;
                                    if (m_consultationEnCours.Parametres.DelaiMasquageTerminnees > 0)
                                    {
                                        infoAlarm.DateEffacement = DateTime.Now.AddMinutes(m_consultationEnCours.Parametres.DelaiMasquageTerminnees);
                                    }
                                    break;
                                }
                            }
                        }
                    }
                }
            }
        }
Esempio n. 3
0
        public static void MonitorAlarmes()
        {
            int nCptWatchDogAlSyst = 0;

            Thread.Sleep(50000);
            CSessionClient session = CSessionClient.CreateInstance();

            session.OpenSession(new CAuthentificationSessionServer());

            while (true)
            {
                //Thread.Sleep(200);    // inhibition pour faciliter debug des autres objets
                //continue;
                nCptWatchDogAlSyst++;
                using (CContexteDonnee ctx = new CContexteDonnee(session.IdSession, true, true))
                {
                    CListeObjetsDonnees lst = new CListeObjetsDonnees(ctx, typeof(CSpvMessalrm));
                    if (lst.Count > 0)
                    {
                        List <CEvenementAlarm> lstAlarm = new List <CEvenementAlarm>();

                        StringBuilder bl = new StringBuilder();
                        foreach (CSpvMessalrm message in lst)
                        {
                            try
                            {
                                CEvenementAlarm eventAlarm = message.GetNewEvenementAlarm();
                                if (eventAlarm != null)
                                {
                                    lstAlarm.Add(eventAlarm);
                                }
                            }
                            catch (Exception e)
                            {
                                C2iEventLog.WriteErreur(e.Message);
                            }

                            bl.Append(message.Id);

                            bl.Append(',');
                        }
                        bl.Remove(bl.Length - 1, 1);

                        if (lstAlarm.Count > 0)
                        {
                            CDonneeNotificationAlarmes notif = new CDonneeNotificationAlarmes(session.IdSession, lstAlarm);
                            CEnvoyeurNotification.EnvoieNotifications(new IDonneeNotification[] { notif });
                        }

                        SendMailsDelegate sndMail = new SendMailsDelegate(SendMails);
                        sndMail.BeginInvoke(lstAlarm, ctx, null, null);

                        IDatabaseConnexion connexion = CSc2iDataServer.GetInstance().GetDatabaseConnexion(session.IdSession, CSpvServeur.c_spvConnection);
                        connexion.RunStatement("Delete from " + CSpvMessalrm.c_nomTableInDb + " where " +
                                               CSpvMessalrm.c_champMESSALRM_ID + " in (" + bl.ToString() + ")");

                        /* TimeSpan sp = DateTime.Now - dt;
                         * double fTime = sp.TotalMilliseconds;*/
                    }//if (lst.Count > 0)

                    if (nCptWatchDogAlSyst >= 200)  // vérification toutes les 20 secondes
                    {
                        nCptWatchDogAlSyst = 0;
                        IDatabaseConnexion cnx = CSc2iDataServer.GetInstance().GetDatabaseConnexion(session.IdSession, CSpvServeur.c_spvConnection);
                        cnx.RunStatement("begin WatchDog; end;");
                    }
                }

                if (C2iStopApp.AppStopper.WaitOne(100, false))
                {
                    break;
                }
            }
        }