//---------------------------------------------------------------------------------------------- // 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); }
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; } } } } } } }
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; } } }