/// <summary> /// Recreate a SessionManager from state. /// </summary> /// <param name="sessionState">SessionState containing details captured from a previous SessionManager or null if no previous SessionManager.</param> /// <param name="sampleRate">Sample rate to determine likelyhood of a new installation being tracked or not.</param> /// <returns>Recreated SessionManager.</returns> public SessionManager(SessionState sessionState, double sampleRate = 100.0) { if (sessionState != null) { visitor = new Visitor(sessionState.VisitorId, sessionState.FirstVisitAt); Session = new Session(sessionState.SessionStartedAt, sessionState.SessionNumber, sessionState.SessionHitCount, sessionState.HitId); Referrer = sessionState.Referrer; PreviousSessionStartedAt = sessionState.PreviousSessionStartedAt; lastActivityAt = sessionState.LastActivityAt; SessionStatus = sessionState.SessionStatus; VisitorStatus = sessionState.VisitorStatus; } else { var localStorage = ApplicationData.Current.LocalSettings; Guid guid = Guid.Empty; if (localStorage.Values.ContainsKey(guidKey) ) { guid = (Guid)localStorage.Values[guidKey]; } else { // Need a better way to get a unique guid guid = Guid.NewGuid(); localStorage.Values[guidKey] = guid; } visitor = new Visitor(guid); Session = new Session(); PreviousSessionStartedAt = Session.StartedAt; SessionStatus = SessionStatus.Starting; var willTrackThisVisitor = ShouldTrackThisNewVisitor(sampleRate); VisitorStatus = willTrackThisVisitor ? VisitorStatus.Active : VisitorStatus.SampledOut; if (!willTrackThisVisitor) Debug.WriteLine("Will not track this visitor. Sampling rate of {0} excluded them", sampleRate); } }
public void New_Visitor_With_Parameters_Sets_Properties() { var id = Guid.NewGuid(); var visitor = new Visitor(id); Assert.AreEqual(id, visitor.ClientId); }
public void New_Default_Visitor_Started_Now() { var start = DateTimeOffset.Now; var session = new Visitor(); var end = DateTimeOffset.Now; Assert.IsTrue(session.FirstVisitAt >= start, "FirstVisitAt too early expected after {0} found {1}", start, session.FirstVisitAt); Assert.IsTrue(session.FirstVisitAt <= end, "FirstVisitAt too late expected before {0} found {1}", end, session.FirstVisitAt); }
public void New_Visitor_With_Parameters_Sets_Properties() { var id = Guid.NewGuid(); var startedAt = DateTimeOffset.Now.Subtract(new TimeSpan(1, 2, 3, 4, 5)); var visitor = new Visitor(id, startedAt); Assert.AreEqual(id, visitor.ClientId); Assert.AreEqual(startedAt, visitor.FirstVisitAt); }
/// <summary> /// Recreate a SessionManager from state. /// </summary> /// <param name="timeout">How long before a session will expire if no activity is seen.</param> /// <param name="sessionState">SessionState containing details captured from a previous SessionManager.</param> /// <returns>Recreated SessionManager.</returns> public SessionManager(TimeSpan timeout, SessionState sessionState) { this.timeout = timeout; if (sessionState != null) { visitor = new Visitor(sessionState.VisitorId, sessionState.FirstVisitAt); Session = new Session(sessionState.SessionStartedAt, sessionState.SessionNumber, sessionState.SessionHitCount, sessionState.HitId); Referrer = sessionState.Referrer; PreviousSessionStartedAt = sessionState.PreviousSessionStartedAt; lastActivityAt = sessionState.LastActivityAt; } else { visitor = new Visitor(); Session = new Session(); PreviousSessionStartedAt = Session.StartedAt; } }
/// <summary> /// Recreate a SessionManager from state. /// </summary> /// <param name="sessionState">SessionState containing details captured from a previous SessionManager or null if no previous SessionManager.</param> /// <param name="sampleRate">Sample rate to determine likelyhood of a new installation being tracked or not.</param> /// <returns>Recreated SessionManager.</returns> public SessionManager(SessionState sessionState, double sampleRate = 100.0) { if (sessionState != null) { visitor = new Visitor(sessionState.VisitorId); Referrer = sessionState.Referrer; lastActivityAt = sessionState.LastActivityAt; SessionStatus = sessionState.SessionStatus; VisitorStatus = sessionState.VisitorStatus; } else { visitor = new Visitor(); SessionStatus = SessionStatus.Starting; var willTrackThisVisitor = ShouldTrackThisNewVisitor(sampleRate); VisitorStatus = willTrackThisVisitor ? VisitorStatus.Active : VisitorStatus.SampledOut; if (!willTrackThisVisitor) Debug.WriteLine("Will not track this visitor. Sampling rate of {0} excluded them", sampleRate); } }