private void ProcessSession()
{
var now = DateTime.Now;
// very firsts Session
if (ActivityState == null)
{
// create fresh activity state
ActivityState = new ActivityState();
ActivityState.SessionCount = 1; // first session
TransferSessionPackage();
ActivityState.ResetSessionAttributes(now);
ActivityState.Enabled = Enabled;
WriteActivityStateInternal();
return;
}
var lastInterval = now - ActivityState.LastActivity.Value;
if (lastInterval.Ticks < 0)
{
Logger.Error("Time Travel!");
ActivityState.LastActivity = now;
WriteActivityStateInternal();
return;
}
// new session
if (lastInterval > SessionInterval)
{
ActivityState.SessionCount++;
ActivityState.LastInterval = lastInterval;
TransferSessionPackage();
ActivityState.ResetSessionAttributes(now);
WriteActivityStateInternal();
return;
}
// new subsession
if (lastInterval > SubsessionInterval)
{
ActivityState.SubSessionCount++;
ActivityState.SessionLenght += lastInterval;
ActivityState.LastActivity = now;
WriteActivityStateInternal();
Logger.Info("Started subsession {0} of session {1}",
ActivityState.SubSessionCount, ActivityState.SessionCount);
return;
}
}