public IList <IEventoSismico> ListaEventi() { List <IEventoSismico> eventi = new List <IEventoSismico>(); // Nella query effettuo una JOIN con la tabella stazioni per ottenere tutti i dati combinati using (SQLiteCommand cmd = new SQLiteCommand("SELECT eventi.id AS eventi_id, eventi.tag AS eventi_tag, " + "eventi.priorita AS eventi_priorita, eventi.timestamp AS eventi_timestamp," + "eventi.messaggio AS eventi_messaggio, stazioni.id AS stazioni_id, " + "stazioni.nome AS stazioni_nome, " + "stazioni.locazione AS stazioni_locazione, " + "stazioni.indirizzoDiRete AS stazioni_indirizzoDiRete, " + "stazioni.porta AS stazioni_porta, stazioni.impronta AS stazioni_impronta " + "FROM eventi LEFT OUTER JOIN stazioni ON eventi.stazione = stazioni.id", _connection)) { using (SQLiteDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { IEventoSismico evento = EventoSismico.ConvertiRigaInEventoSismico(reader); if (evento != null) { eventi.Add(evento); } } } } return(eventi); }
public bool RegistraEvento(EventoSismico evento) { int risultato = -1; using (SQLiteCommand cmd = new SQLiteCommand(_connection)) { // Preparo la query SQL cmd.CommandText = "INSERT INTO eventi(tag, priorita, messaggio, timestamp, stazione) VALUES (@Tag, @Priorita, @Messaggio, @Timestamp, @Stazione)"; cmd.Prepare(); cmd.Parameters.AddWithValue("@Tag", evento.Tag); cmd.Parameters.AddWithValue("@Priorita", evento.Priorita); cmd.Parameters.AddWithValue("@Messaggio", evento.Messaggio); cmd.Parameters.AddWithValue("@Timestamp", evento.Timestamp); cmd.Parameters.AddWithValue("@Stazione", ((Stazione)evento.Stazione)?.Id); try { risultato = cmd.ExecuteNonQuery(); // Aggiorno il valore dell'id dell'evento if (risultato > 0) { evento.Id = _connection.LastInsertRowId; } } catch (SQLiteException e) { Console.WriteLine(e.ToString()); } } return(risultato > 0); }
/// <summary> /// Notifica l'evento in maniera sincrona /// </summary> /// <param name="evnt"></param> public void NotificaEvento(EventoSismico evnt) { // Send the event to every receiver, while making sure they are not null RicevitoriEventoSismico?.Invoke(evnt); // Save the event using the EventoSismico Repository _storicoController.RegistraEvento(evnt); }
/// <summary> /// Utilizzato per convertire una riga di una query sql in un oggetto EventoSismico /// </summary> /// <param name="reader"></param> /// <returns></returns> public static EventoSismico ConvertiRigaInEventoSismico(SQLiteDataReader reader) { EventoSismico evento = new EventoSismico(); // Popolo i campi dell'evento evento.Id = Convert.ToInt64(reader["eventi_id"]); evento.Messaggio = reader["eventi_messaggio"].ToString(); evento.Priorita = (Priorita)Convert.ToInt32(reader["eventi_priorita"]); evento.Tag = reader["eventi_tag"].ToString(); evento.Timestamp = Convert.ToInt64(reader["eventi_timestamp"]); evento.Stazione = stazione.Stazione.ConvertiRigaInStazione(reader); return(evento); }
/// <summary> /// Notifica l'evento in maniera asincrona /// </summary> /// <param name="evnt"></param> public void NotificaEventoAsync(EventoSismico evnt) { // Notifico l'evento e lo registro in maniera asincrona Task.Run(() => NotificaEvento(evnt)); }
protected bool Equals(EventoSismico other) { return(string.Equals(Tag, other.Tag) && Priorita == other.Priorita && string.Equals(Messaggio, other.Messaggio) && Timestamp == other.Timestamp && Equals(Stazione, other.Stazione) && Id == other.Id); }