예제 #1
0
        public void TestRegistraEvento()
        {
            Stazione stazione = new Stazione
            {
                Nome                   = "BolognaA1",
                Locazione              = "Bologna",
                IndirizzoDiRete        = IPAddress.Parse("10.56.77.233"),
                Porta                  = 5555,
                ImprontaChiavePubblica = "aksjdada8s7d8a6da78sdEEeewrR"
            };

            Assert.IsTrue(gestioneStazioniController.Registra(stazione));

            EventoSismico evento = new EventoSismico
            {
                Messaggio = "Magnitudo superata",
                Priorita  = Priorita.Fatal,
                Stazione  = stazione,
                Tag       = "Magnitudo",
                Timestamp = 1234
            };

            Assert.IsTrue(storicoController.RegistraEvento(evento));

            // Verifico che sia stato salvato correttamente
            IEventoSismico evnt = storicoController.ListaEventi()[0];

            Assert.AreEqual(evento, evnt);
            Assert.AreEqual(evnt.Stazione, stazione);
        }
예제 #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 void TestEventId()
        {
            EventoSismico e = createMockEvent();

            Assert.AreEqual(e.Id, -1);

            e.Id = 12345;
            Assert.AreEqual(e.Id, 12345);
        }
예제 #4
0
        public void TestLeggiEventiConFiltra()
        {
            Stazione stazione = new Stazione
            {
                Nome                   = "BolognaA1",
                Locazione              = "Bologna",
                IndirizzoDiRete        = IPAddress.Parse("10.56.77.233"),
                Porta                  = 5555,
                ImprontaChiavePubblica = "aksjdada8s7d8a6da78sdEEeewrR"
            };

            Assert.IsTrue(gestioneStazioniController.Registra(stazione));

            EventoSismico evento = new EventoSismico
            {
                Messaggio = "Magnitudo superata",
                Priorita  = Priorita.Fatal,
                Stazione  = stazione,
                Tag       = "Magnitudo",
                Timestamp = 1234
            };

            Assert.IsTrue(storicoController.RegistraEvento(evento));

            EventoSismico evento2 = new EventoSismico
            {
                Messaggio = "Frequenza superata",
                Priorita  = Priorita.Info,
                Stazione  = stazione,
                Tag       = "Frequenza",
                Timestamp = 1235
            };

            Assert.IsTrue(storicoController.RegistraEvento(evento2));

            Assert.AreEqual(storicoController.ListaEventi(new List <IFiltroEvento> {
                new FiltroCerca("quenza")
            }).Count, 1);
            Assert.AreEqual(storicoController.ListaEventi(new List <IFiltroEvento> {
                new FiltroCerca("superata")
            }).Count, 2);
            Assert.AreEqual(storicoController.ListaEventi(new List <IFiltroEvento> {
                new FiltroCerca("superata"), new FiltroPriorita(Priorita.Fatal)
            }).Count, 1);
            Assert.AreEqual(storicoController.ListaEventi(new List <IFiltroEvento> {
                new FiltroIntervalloDiTempo(10, 1300)
            }).Count, 2);
            Assert.AreEqual(storicoController.ListaEventi(new List <IFiltroEvento> {
                new FiltroTag("Magnitudo")
            }).Count, 1);
        }
예제 #5
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);
        }
예제 #6
0
        public void TestListaEventi()
        {
            Stazione stazione = new Stazione
            {
                Nome                   = "BolognaA1",
                Locazione              = "Bologna",
                IndirizzoDiRete        = IPAddress.Parse("10.56.77.233"),
                Porta                  = 5555,
                ImprontaChiavePubblica = "aksjdada8s7d8a6da78sdEEeewrR"
            };

            Assert.IsTrue(gestioneStazioniController.Registra(stazione));

            EventoSismico evento = new EventoSismico
            {
                Messaggio = "Magnitudo superata",
                Priorita  = Priorita.Fatal,
                Stazione  = stazione,
                Tag       = "Magnitudo",
                Timestamp = 1234
            };

            Assert.IsTrue(storicoController.RegistraEvento(evento));

            EventoSismico evento2 = new EventoSismico
            {
                Messaggio = "Frequenza superata",
                Priorita  = Priorita.Info,
                Stazione  = stazione,
                Tag       = "Frequenza",
                Timestamp = 1235
            };

            Assert.IsTrue(storicoController.RegistraEvento(evento2));

            IList <IEventoSismico> eventi = storicoController.ListaEventi();

            Assert.AreEqual(eventi[0], evento);
            Assert.AreEqual(eventi[1], evento2);
        }
예제 #7
0
        public void TestEventManager()
        {
            EventoSismico e = EventoSismicoTest.createMockEvent();

            // Create a mock EventoSismico Repository
            Mock <IStoricoController> eventRepository = new Mock <IStoricoController>();

            GestoreEventi gestoreEventi = new GestoreEventi(eventRepository.Object);

            // Register two event receivers and make sure they are all called
            bool firstReceived  = false;
            bool secondReceived = false;

            gestoreEventi.RicevitoriEventoSismico += (evnt) =>
            {
                // Make sure the received
                Assert.AreEqual(e, evnt);
                firstReceived = true;
            };

            gestoreEventi.RicevitoriEventoSismico += (evnt) =>
            {
                // Make sure the received
                Assert.AreEqual(e, evnt);
                secondReceived = true;
            };

            // Register the event
            gestoreEventi.NotificaEvento(e);

            Assert.IsTrue(firstReceived);
            Assert.IsTrue(secondReceived);

            // Check if the event controller has been called
            eventRepository.Verify(x => x.RegistraEvento(e), Times.Once());
        }
예제 #8
0
        static void Main()
        {
            // Inizializzo il sensore
            ISensore sensore = new MockSensore();
            //ISensore sensore = new SensoreSeriale("COM10", 74880);
            //sensore.RicevitoriDatiSensore += dati => Console.WriteLine(String.Join(",", dati));

            // Creo il thread del sensore e lo avvio
            Thread threadSensore = new Thread(() => sensore.CicloPrincipale());

            threadSensore.Name = "Thread Sensore";
            threadSensore.Start();

            IGestioneStazioniController stazioniController = new GestioneStazioniController(PERCORSO_DATABASE);

            Stazione stazione = new Stazione
            {
                Nome                   = "BolognaA1",
                Locazione              = "Bologna",
                IndirizzoDiRete        = IPAddress.Parse("127.0.0.1"),
                Porta                  = 8001,
                ImprontaChiavePubblica = "E2C9153221FE658AFDCEBE095EE5D2392AF8C4AE"
            };

            /*
             * // Inizializzo il gestore delle stazioni
             *
             * IGestioneStazioniController stazioniController = new GestioneStazioniController(PERCORSO_DATABASE);
             * stazioniController.Registra(stazione);
             *
             * stazione.Nome = "ReggioEmiliaA1";
             * stazione.Locazione = "Reggio Emilia";
             * stazione.IndirizzoDiRete = IPAddress.Parse("10.1.45.230");
             * stazione.Porta = 5555;
             *
             * stazioniController.Registra(stazione);*/

            // Inizializzo il gestore utenti

            IGestioneUtentiController gestioneUtentiController = new GestioneUtentiController(PERCORSO_DATABASE);
            AutenticazioneController  autenticazioneController = new AutenticazioneController(gestioneUtentiController);

            // Aggiungo l'utente tizio
            Utente utente = new UtenteNormale
            {
                Nome        = "tizio",
                Cognome     = "caio",
                Email       = "*****@*****.**",
                LoginRemoto = true,
                Username    = "******"
            };

            utente.ImpostaPasswordDaOriginale("password");
            if (gestioneUtentiController.ValidaCredenziali("tizio", "password") == null)
            {
                gestioneUtentiController.Registra(utente);
            }

            EventoSismico evento = new EventoSismico
            {
                Messaggio = "Frequenza",
                Priorita  = Priorita.Fatal,
                Stazione  = stazione,
                Tag       = "Frequenza",
                Timestamp = 1234
            };
            IStoricoController storicoController = new StoricoController(PERCORSO_DATABASE);

            storicoController.RegistraEvento(evento);

            GestoreEventi gestoreEventi = new GestoreEventi(storicoController);

            gestoreEventi.RicevitoriEventoSismico += sismico => Console.WriteLine(sismico);

            // Avvio il server della stazione
            ServerStazione server = new ServerStazione(sensore, gestioneUtentiController, Sismio.CertificatoResource.certificato, "passwordsismio");

            server.IndirizzoServer = "127.0.0.1";  // TODO: cambiare con il proprio locale ( tipo 192.168.1.105 )
            server.Avvia();

            CreatoreConnessioni creatore = new CreatoreConnessioni(stazioniController);
            SorgenteFactory     factory  = new SorgenteFactory(creatore, sensore, gestoreEventi);

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            Form loginForm = new Login(autenticazioneController, gestioneUtentiController, stazioniController, storicoController, factory, gestoreEventi);

            Application.Run(loginForm);
        }