public void OnReceiveMessage(MessageReceivedEventArgs e) { DateTime dt = DateTime.Now; ListViewItem item = new ListViewItem(e.ToString()); item.Tag = e.Message; if (m_wndListView.Items.Count > 0) { m_wndListView.Items.Insert(0, item); } else { m_wndListView.Items.Add(item); } CTrapInstance trap = CTrapInstance.FromMessage( e.Message, CBaseTypesAlarmes.Instance.BaseTraps); if (trap != null) { IEnumerable <CTrapHandler> lstTrapsHandlers = CBaseTypesAlarmes.Instance.BaseTraps.GetTrapsHandlersAAppliquer(trap); foreach (CTrapHandler handler in lstTrapsHandlers) { handler.CreateAlarmesOnTrap(trap); } foreach (CAlarmeACreer creation in trap.AlarmesACreer) { m_gestionnaireAlarmes.CreateAlarme(creation); } TimeSpan sp = DateTime.Now - dt; System.Console.WriteLine("Durée traitement : " + sp.TotalMilliseconds.ToString()); RefreshListeAlarmes(); } }
//----------------------------------------------- private void TraiteMessagesATraiter() { if (m_nWaitingCounter > 5) { return; } m_nWaitingCounter++; lock (typeof(CLockerTraiteMessage)) { m_nWaitingCounter--; List <ISnmpMessage> lstMessages = new List <ISnmpMessage>(); lock (m_listeMessagesATraiter) { lstMessages.AddRange(m_listeMessagesATraiter); m_listeMessagesATraiter.Clear(); } foreach (ISnmpMessage message in lstMessages) { m_nNbMessages++; DateTime dtChrono = DateTime.Now; string strIpAgent = ""; TrapV1Message trapV1 = message as TrapV1Message; TrapV2Message trapV2 = message as TrapV2Message; if (trapV1 != null) { m_gestionnaireAlarmes.Trace.Write( "Trap received : " + trapV1.GetTraceInfo(), ALTRACE.TRACE, ALTRACE.DEBUG); strIpAgent = trapV1.AgentAddress.ToString(); StringBuilder bl = new StringBuilder(); foreach (Variable valeur in trapV1.Variables()) { bl.Append(valeur.Id.ToString()); bl.Append("="); bl.Append(valeur.Data.ToString()); bl.Append("\r\n"); } m_gestionnaireAlarmes.Trace.Write( "Trap fields : \r\n" + bl.ToString(), ALTRACE.TRACE, ALTRACE.DEBUG); } else if (trapV2 != null) { m_gestionnaireAlarmes.Trace.Write( "Trap received : " + trapV2.GetTraceInfo(), ALTRACE.TRACE, ALTRACE.DEBUG); if (trapV2.SenderIP != null) { strIpAgent = trapV2.SenderIP.ToString(); } StringBuilder bl = new StringBuilder(); foreach (Variable valeur in trapV2.Variables()) { bl.Append(valeur.Id.ToString()); bl.Append("="); bl.Append(valeur.Data.ToString()); bl.Append("\r\n"); } m_gestionnaireAlarmes.Trace.Write( "Trap fields : \r\n" + bl.ToString(), ALTRACE.TRACE, ALTRACE.DEBUG); } try { CTrapInstance trapTmp = CTrapInstance.FromMessage(message, null); if (trapTmp == null) { m_gestionnaireAlarmes.Trace.Write( "Can not interpret message " + message.ToString(), ALTRACE.TRACE, ALTRACE.DEBUG); continue; } IEnumerable <CAgentSnmpPourSupervision> lstAgents = GetAgentsForTrap(trapTmp, strIpAgent); bool bHasAgent = false; foreach (CAgentSnmpPourSupervision agent in lstAgents) { m_gestionnaireAlarmes.Trace.Write( "Trap managed by agent " + agent.Id, ALTRACE.DEBUG); CTypeAgentPourSupervision typeAgent = agent.TypeAgent; if (typeAgent != null) { CTrapInstance trap = CTrapInstance.FromMessage( message, agent); if (trap != null) { IEnumerable <CTrapHandler> lstTrapsHandlers = typeAgent.GetTrapsHandlersAAppliquer(trap); foreach (CTrapHandler handler in lstTrapsHandlers) { m_gestionnaireAlarmes.Trace.Write("Apply trap handler " + handler.Libelle, ALTRACE.DEBUG); handler.CreateAlarmesOnTrap(trap, m_gestionnaireAlarmes.Trace); } if (lstTrapsHandlers.Count() == 0) { m_gestionnaireAlarmes.Trace.Write( "No trap handler for this trap", ALTRACE.DEBUG); } foreach (CAlarmeACreer creation in trap.AlarmesACreer) { m_gestionnaireAlarmes.CreateAlarme(creation, EModeRemonteeAlarmes.InscrireARemonterMaisNePasLeFaire); } if (trap.AlarmesACreer.Count() == 0) { m_gestionnaireAlarmes.Trace.Write("No alarm creator for this trap", ALTRACE.DEBUG); } } } } if (!bHasAgent) { m_gestionnaireAlarmes.Trace.Write( "No agent for this trap", ALTRACE.DEBUG); } } catch (Exception ex) { m_gestionnaireAlarmes.Trace.Write( "Exception : " + ex.Message, ALTRACE.DEBUG); lock (m_listeMessagesATraiter) { m_listeMessagesATraiter.InsertRange(0, lstMessages); } break; } TimeSpan sp = DateTime.Now - dtChrono; if (m_nNbMessages % 100 == 0) { Console.WriteLine("Traite alrm (" + m_nNbMessages + "): " + sp.TotalMilliseconds); } } } m_gestionnaireAlarmes.SendAlarmes(); }