/// <summary> /// Closes an open session. /// </summary> private void EndSession() { lock (_SyncLock) { if (_Session != null) { Status = PluginStrings.NotUpdatingDatabase; try { FlushFlights(true); _Session.EndTime = Provider.LocalNow; _Database.UpdateSession(_Session); StatusDescription = null; } catch (ThreadAbortException) { } catch (Exception ex) { Debug.WriteLine(String.Format("BaseStationDatabaseWriter.Plugin.EndSession caught exception {0}", ex.ToString())); StatusDescription = String.Format(PluginStrings.ExceptionCaughtWhenClosingSession, ex.Message); Factory.Singleton.Resolve <ILog>().Singleton.WriteLine("Database writer plugin caught exception on closing session: {0}", ex.ToString()); } finally { _Session = null; } OnStatusChanged(EventArgs.Empty); } } }
/// <summary> /// Closes an open session. /// </summary> private void EndSession() { lock (_SyncLock) { if (_Session != null) { Status = PluginStrings.NotUpdatingDatabase; try { FlushFlights(true); _Session.EndTime = Provider.LocalNow; _Database.UpdateSession(_Session); StatusDescription = null; } catch (ThreadAbortException) { } catch (Exception ex) { AbandonSession(ex, PluginStrings.ExceptionCaughtWhenClosingSession, Status); Debug.WriteLine(String.Format("BaseStationDatabaseWriter.Plugin.EndSession caught exception {0}", ex.ToString())); Factory.Singleton.Resolve <ILog>().Singleton.WriteLine("Database writer plugin caught exception on closing session: {0}", ex.ToString()); } finally { _Session = null; _OnlineLookupCache.Enabled = false; } } } }
/// <summary> /// Creates a new session. /// </summary> private void StartSession() { lock (_SyncLock) { if (_Session == null) { if (!_Options.Enabled) { Status = PluginStrings.Disabled; StatusDescription = null; } else if (String.IsNullOrEmpty(_Database.FileName)) { Status = PluginStrings.EnabledNoDatabase; StatusDescription = null; } else if (!Provider.FileExists(_Database.FileName)) { Status = PluginStrings.EnabledNotUpdating; StatusDescription = String.Format(PluginStrings.SomethingDoesNotExist, _Database.FileName); } else if (Provider.FileSize(_Database.FileName) == 0L) { Status = PluginStrings.EnabledNotUpdating; StatusDescription = String.Format(PluginStrings.SomethingIsZeroLength, _Database.FileName); } else if (!_Options.AllowUpdateOfOtherDatabases && !DatabaseCreatedByPlugin()) { Status = PluginStrings.EnabledNotUpdating; StatusDescription = PluginStrings.UpdatingDatabasesNotCreatedByPluginForbidden; } else { Status = String.Format(PluginStrings.EnabledAndUpdatingSomething, _Database.FileName); StatusDescription = null; try { _Database.WriteSupportEnabled = true; var location = _Database.GetLocations().OrderBy(c => c.LocationID).FirstOrDefault(); _Session = new BaseStationSession() { LocationID = location == null ? 0 : location.LocationID, StartTime = Provider.LocalNow, }; _Database.InsertSession(_Session); } catch (ThreadAbortException) { } catch (Exception ex) { Debug.WriteLine(String.Format("BaseStationDatabaseWriter.Plugin.StartSession caught exception {0}", ex.ToString())); Status = PluginStrings.EnabledNotUpdating; StatusDescription = String.Format(PluginStrings.ExceptionCaughtWhenStartingSession, ex.Message); Factory.Singleton.Resolve <ILog>().Singleton.WriteLine("Database writer plugin caught exception on starting session: {0}", ex.ToString()); } } OnStatusChanged(EventArgs.Empty); } } }
public void BaseStationSession_Constructor_Initialises_To_Known_State_And_Properties_Work() { var session = new BaseStationSession(); TestUtilities.TestProperty(session, "EndTime", null, DateTime.Now); TestUtilities.TestProperty(session, "LocationID", 0, 120); TestUtilities.TestProperty(session, "SessionID", 0, 139); TestUtilities.TestProperty(session, "StartTime", DateTime.MinValue, DateTime.Now); }
/// <summary> /// Generates parameters for a session object. /// </summary> /// <param name="session"></param> /// <param name="includeSessionID"></param> /// <returns></returns> public static DynamicParameters FromSession(BaseStationSession session, bool includeSessionID = true) { var result = new DynamicParameters(); if (includeSessionID) { result.Add(nameof(session.SessionID), value: session.SessionID); } result.Add(nameof(session.LocationID), value: session.LocationID); result.Add(nameof(session.StartTime), value: session.StartTime); result.Add(nameof(session.EndTime), value: session.EndTime); return(result); }
/// <summary> /// See interface docs. /// </summary> /// <param name="session"></param> public void DeleteSession(BaseStationSession session) { if (!WriteSupportEnabled) { throw new InvalidOperationException("You must enable writes before you can delete a session record"); } lock (_ConnectionLock) { OpenConnection(); if (_Connection != null) { _SessionsTable.Delete(_Connection, _TransactionHelper.Transaction, _DatabaseLog, session); } } }
/// <summary> /// See interface docs. /// </summary> /// <param name="session"></param> public void UpdateSession(BaseStationSession session) { if (!WriteSupportEnabled) { throw new InvalidOperationException("You must enable writes before you can update a session record"); } session.StartTime = SQLiteDateHelper.Truncate(session.StartTime); session.EndTime = SQLiteDateHelper.Truncate(session.EndTime); lock (_ConnectionLock) { OpenConnection(); if (_Connection != null) { _SessionsTable.Update(_Connection, _TransactionHelper.Transaction, _DatabaseLog, session); } } }
/// <summary> /// See interface docs. /// </summary> /// <returns></returns> public IList <BaseStationSession> GetSessions() { IList <BaseStationSession> result = null; lock (_ConnectionLock) { OpenConnection(); if (_Connection != null) { result = _SessionsTable.GetAllRecords(_Connection, _TransactionHelper.Transaction, _DatabaseLog); } else { result = new BaseStationSession[] {} }; } return(result); }
/// <summary> /// Aborts the current session entirely without attempting any further writes to the database. /// </summary> /// <param name="ex"></param> /// <param name="format"></param> /// <param name="status"></param> private void AbandonSession(Exception ex, string format, string status = null) { _Session = null; Status = status ?? PluginStrings.EnabledNotUpdating; StatusDescription = String.Format(format, ex == null ? "null" : ex.Message); }
/// <summary> /// Creates a new session. /// </summary> private void StartSession() { var feedManager = Factory.Singleton.Resolve <IFeedManager>().Singleton; lock (_SyncLock) { if (_Session == null) { if (!_Options.Enabled) { Status = PluginStrings.Disabled; StatusDescription = null; } else if (_Options.ReceiverId == 0) { Status = PluginStrings.EnabledNoReceiver; } else if (feedManager.GetByUniqueId(_Options.ReceiverId, ignoreInvisibleFeeds: false) == null) { Status = PluginStrings.EnabledBadReceiver; } else if (String.IsNullOrEmpty(_Database.FileName)) { Status = PluginStrings.EnabledNoDatabase; StatusDescription = null; } else if (!Provider.FileExists(_Database.FileName)) { Status = PluginStrings.EnabledNotUpdating; StatusDescription = String.Format(PluginStrings.SomethingDoesNotExist, _Database.FileName); } else if (Provider.FileSize(_Database.FileName) == 0L) { Status = PluginStrings.EnabledNotUpdating; StatusDescription = String.Format(PluginStrings.SomethingIsZeroLength, _Database.FileName); } else if (!_Options.AllowUpdateOfOtherDatabases && !DatabaseCreatedByPlugin()) { Status = PluginStrings.EnabledNotUpdating; StatusDescription = PluginStrings.UpdatingDatabasesNotCreatedByPluginForbidden; } else { Status = String.Format(PluginStrings.EnabledAndUpdatingSomething, _Database.FileName); StatusDescription = null; try { _Database.WriteSupportEnabled = true; var location = _Database.GetLocations().OrderBy(c => c.LocationID).FirstOrDefault(); _Session = new BaseStationSession() { LocationID = location == null ? 0 : location.LocationID, StartTime = Provider.LocalNow, }; _Database.InsertSession(_Session); _OnlineLookupCache.Enabled = _Session != null && _Options.SaveDownloadedAircraftDetails; } catch (ThreadAbortException) { } catch (Exception ex) { AbandonSession(ex, PluginStrings.ExceptionCaughtWhenStartingSession); Debug.WriteLine(String.Format("BaseStationDatabaseWriter.Plugin.StartSession caught exception {0}", ex.ToString())); Factory.Singleton.Resolve <ILog>().Singleton.WriteLine("Database writer plugin caught exception on starting session: {0}", ex.ToString()); } } } } }
/// <summary> /// Deletes the record passed across. /// </summary> /// <param name="connection"></param> /// <param name="transaction"></param> /// <param name="log"></param> /// <param name="session"></param> public void Delete(IDbConnection connection, IDbTransaction transaction, TextWriter log, BaseStationSession session) { var preparedCommand = PrepareCommand(connection, transaction, "Delete", _DeleteCommandText, 1); Sql.SetParameters(preparedCommand, session.SessionID); Sql.LogCommand(log, preparedCommand.Command); preparedCommand.Command.ExecuteNonQuery(); }
/// <summary> /// Updates an existing record. /// </summary> /// <param name="connection"></param> /// <param name="transaction"></param> /// <param name="log"></param> /// <param name="session"></param> public void Update(IDbConnection connection, IDbTransaction transaction, TextWriter log, BaseStationSession session) { var preparedCommand = PrepareCommand(connection, transaction, "Update", _UpdateCommandText, 4); Sql.SetParameters(preparedCommand, session.LocationID, session.StartTime, session.EndTime, session.SessionID); Sql.LogCommand(log, preparedCommand.Command); preparedCommand.Command.ExecuteNonQuery(); }
/// <summary> /// Inserts a new record and returns the ID. /// </summary> /// <param name="connection"></param> /// <param name="transaction"></param> /// <param name="log"></param> /// <param name="session"></param> /// <returns></returns> public int Insert(IDbConnection connection, IDbTransaction transaction, TextWriter log, BaseStationSession session) { var preparedCommand = PrepareInsert(connection, transaction, "Insert", "SessionID", "LocationID", "StartTime", "EndTime"); return((int)Sql.ExecuteInsert(preparedCommand, log, session.LocationID, session.StartTime, session.EndTime)); }
public void DeleteSession(BaseStationSession session) { ; }
public void UpdateSession(BaseStationSession session) { ; }
public void InsertSession(BaseStationSession session) { ; }