/// <summary> /// Creates a new session and adds it to the beacon sender. The top level action count is reset to zero and the /// last interaction time is set to the current timestamp. /// <para> /// In case the given <code>initialServerConfig</code> is not null, the new session will be initialized with /// this server configuration. The created session however will not be in state /// <see cref="ISessionState.IsConfigured">configured</see>, meaning new session requests will be performed for /// this session. /// </para> /// <para> /// In case the given <code>updatedServerConfig</code> is not null, the new session will be updated with this /// server configuration. The created session will be in state /// <see cref="ISessionState.IsConfigured">configured</see>, meaning new session requests will be omitted. /// </para> /// </summary> /// <param name="initialServerConfig"> /// the server configuration with which the session will be initialized. Can be <code>null</code> /// </param> /// <param name="updatedServerConfig"> /// the server configuration with which the session will be updated. Can be <code>null</code>. /// </param> private void CreateAndAssignCurrentSession(IServerConfiguration initialServerConfig, IServerConfiguration updatedServerConfig) { var session = sessionCreator.CreateSession(this); var beacon = session.Beacon; beacon.OnServerConfigurationUpdate += OnServerConfigurationUpdate; ThisComposite.StoreChildInList(session); lastInteractionTime = beacon.SessionStartTime; topLevelActionCount = 0; if (initialServerConfig != null) { session.InitializeServerConfiguration(initialServerConfig); } if (updatedServerConfig != null) { session.UpdateServerConfiguration(updatedServerConfig); } lock (lockObject) { // synchronize access currentSession = session; } beaconSender.AddSession(currentSession); }
/// <summary> /// Creates a new session and adds it to the beacon sender. The top level action count is reset to zero and the /// last interaction time is set to the current timestamp. /// <para> /// In case the given <code>initialServerConfig</code> is not null, the new session will be initialized with /// this server configuration. The created session however will not be in state /// <see cref="ISessionState.IsConfigured">configured</see>, meaning new session requests will be performed for /// this session. /// </para> /// <para> /// In case the given <code>updatedServerConfig</code> is not null, the new session will be updated with this /// server configuration. The created session will be in state /// <see cref="ISessionState.IsConfigured">configured</see>, meaning new session requests will be omitted. /// </para> /// </summary> /// <param name="initialServerConfig"> /// the server configuration with which the session will be initialized. Can be <code>null</code> /// </param> /// <param name="updatedServerConfig"> /// the server configuration with which the session will be updated. Can be <code>null</code>. /// </param> /// <returns>the newly created session.</returns> private ISessionInternals CreateSession(IServerConfiguration initialServerConfig, IServerConfiguration updatedServerConfig) { var session = sessionCreator.CreateSession(this); var beacon = session.Beacon; beacon.OnServerConfigurationUpdate += OnServerConfigurationUpdate; ThisComposite.StoreChildInList(session); lastInteractionTime = beacon.SessionStartTime; topLevelActionCount = 0; if (initialServerConfig != null) { session.InitializeServerConfiguration(initialServerConfig); } if (updatedServerConfig != null) { session.UpdateServerConfiguration(updatedServerConfig); } beaconSender.AddSession(session); return(session); }