コード例 #1
0
        /// <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);
                }
            }
        }
コード例 #2
0
ファイル: Plugin.cs プロジェクト: vishalishere/vrs
        /// <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;
                    }
                }
            }
        }
コード例 #3
0
        /// <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);
                }
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        /// <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);
        }
コード例 #6
0
        /// <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);
                }
            }
        }
コード例 #7
0
        /// <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);
                }
            }
        }
コード例 #8
0
        /// <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);
        }
コード例 #9
0
ファイル: Plugin.cs プロジェクト: vishalishere/vrs
 /// <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);
 }
コード例 #10
0
ファイル: Plugin.cs プロジェクト: vishalishere/vrs
        /// <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());
                        }
                    }
                }
            }
        }
コード例 #11
0
        /// <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();
        }
コード例 #12
0
        /// <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();
        }
コード例 #13
0
        /// <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));
        }
コード例 #14
0
 public void DeleteSession(BaseStationSession session)
 {
     ;
 }
コード例 #15
0
 public void UpdateSession(BaseStationSession session)
 {
     ;
 }
コード例 #16
0
 public void InsertSession(BaseStationSession session)
 {
     ;
 }