コード例 #1
0
 public override void Analizza(int[] buffer)
 {
     foreach (var i in buffer)
     {
         RicevitoriRisultato?.Invoke(i);
     }
 }
コード例 #2
0
        public override void Analizza(int[] buffer)
        {
            // Trovo il tempo attuale
            long tempoAttuale = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;

            // Trova il massimo elemento
            int max = -1;

            for (int i = 0; i < buffer.Length; i++)
            {
                if (buffer[i] > max)
                {
                    max = buffer[i];
                }
            }

            if (max > SogliaPicco && (tempoAttuale - TempoUltimoPicco) > TempoDistanzaMinimo)
            {
                codaPicchi.Enqueue(tempoAttuale);
                TempoUltimoPicco = tempoAttuale;
            }

            // Conto i picchi e dimensiono la coda
            if (codaPicchi.Count > 0 && (tempoAttuale - codaPicchi.Peek()) > TempoAnalisi)
            {
                codaPicchi.Dequeue();
            }

            int valoreFrequenza = codaPicchi.Count;

            // Verifico se il massimo supera una soglia
            int indiceSoglia = -1;

            for (int i = 0; i < Soglie.Length; i++)
            {
                if (valoreFrequenza > Soglie[i])
                {
                    indiceSoglia = i;
                }
            }

            // Se la supera, creo un evento
            if (indiceSoglia >= 0)
            {
                EventoSismico evento = new EventoSismico
                {
                    Messaggio = "Frequenza ha superato: " + valoreFrequenza,
                    Priorita  = (Priorita)indiceSoglia,
                    Stazione  = Stazione,
                    Tag       = "Frequenta",
                    Timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds()
                };
                GestoreEventi.NotificaEventoAsync(evento);
            }

            // Notifica il risultato
            RicevitoriRisultato?.Invoke(valoreFrequenza);
        }
コード例 #3
0
        public override void Analizza(int[] buffer)
        {
            long tempoAttuale = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;

            // Trova il massimo elemento
            int max = -1;

            for (int i = 0; i < buffer.Length; i++)
            {
                if (buffer[i] > max)
                {
                    max = buffer[i];
                }
            }

            // Converto in magnitudo
            double valoreMagnitudine = Math.Abs(max - 500) / 50f;

            // Verifico se il massimo supera una soglia
            int indiceSoglia = -1;

            for (int i = 0; i < Soglie.Length; i++)
            {
                if (valoreMagnitudine > Soglie[i])
                {
                    indiceSoglia = i;
                }
            }

            // Se la supera, creo un evento
            if (indiceSoglia >= 0 && (tempoAttuale - _tempoUltimoAvviso) > DistanzaMinimaTraAvvisi)
            {
                EventoSismico evento = new EventoSismico
                {
                    Messaggio = "Magnitudo ha superato: " + valoreMagnitudine,
                    Priorita  = (Priorita)indiceSoglia,
                    Stazione  = Stazione,
                    Tag       = "Magnitudo",
                    Timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds()
                };
                GestoreEventi.NotificaEventoAsync(evento);
                _tempoUltimoAvviso = tempoAttuale;
            }

            // Notifica il risultato
            RicevitoriRisultato?.Invoke(valoreMagnitudine);
        }