/// <summary> /// Logs the given event. /// </summary> /// <param name="eventRecord">The event record.</param> public void LogEvent(EventRecord eventRecord) { foreach (IEventLogAware observer in this.eventObservers) { eventRecord = observer.Observe(eventRecord); } this.loggedEvents.Add(eventRecord); }
/// <summary> /// Occurs when the timeOutTimer has fired (after 5 minutes of inactivity). /// </summary> /// <param name="sender">The sender.</param> /// <param name="args">The <see cref="System.EventArgs"/> instance containing the event data.</param> private void TimeOutTimerTick(object sender, EventArgs args) { EventRecord timeoutRecord = new EventRecord { EventName = "SessionTimedOut", EventTime = DateTime.Now }; this.LogSessionEvent(timeoutRecord); this.session.EndTime = timeoutRecord.EventTime; this.timeOutTimer.Stop(); this.eventLogger.ResetLog(); this.OnSessionTimedOut(); }
/// <summary> /// Starts a new session. /// </summary> public void StartSession() { EventRecord startRecord = new EventRecord { EventName = "SessionStarted", EventTime = DateTime.Now }; this.LogSessionEvent(startRecord); this.session = new Session { StartTime = DateTime.Now }; this.timeOutTimer.Start(); this.OnSessionStarted(); this.currentState = new ApplicationState { Name = "StartState" }; }
/// <summary> /// Logs an event in the current session. /// </summary> /// <param name="eventRecord">The event record.</param> public void LogSessionEvent(EventRecord eventRecord) { this.timeOutTimer.Stop(); this.timeOutTimer.Start(); this.eventLogger.LogEvent(eventRecord); }
/// <summary> /// Goes to specified state in the current session. /// </summary> /// <param name="targetState">The state to go to.</param> public void GoToState(ApplicationState targetState) { EventRecord stateChangeRecord = new EventRecord { EventName = "StateChanged", EventTime = DateTime.Now, Metadata = new Dictionary<string, object> { { "PreviousState", this.currentState.Name }, { "CurrentState", targetState.Name } } }; this.LogSessionEvent(stateChangeRecord); this.previousState = this.currentState; this.currentState = targetState; this.OnStateChanged(); }
/// <summary> /// Ends the current session. /// </summary> public void EndSession() { EventRecord endRecord = new EventRecord { EventName = "SessionEnded", EventTime = DateTime.Now }; this.LogSessionEvent(endRecord); this.session.EndTime = endRecord.EventTime; this.timeOutTimer.Stop(); this.eventLogger.ResetLog(); this.OnSessionEnded(); }