public UTSession ( IUTSessionConfig config, IUTInteraction defaultInteraction, string deviceIdentifier, string uTTokenValue, IUTGrammar grammar = null ) { if (null == config) { throw new ArgumentNullException(nameof(UTSession), " config can not be null"); } if (grammar == null) { grammar = UTGrammar.UTV1Grammar(); } this.utGrammar = grammar; this.defaultInteraction = defaultInteraction; this.defaultDeviceIdentifier = deviceIdentifier; this.sessionConfig = config.SessionConfigShallowCopy(); this.requestMerger = new UserRequestMerger(this.sessionConfig, this.defaultDeviceIdentifier); this.uTTokenValue = uTTokenValue; this.cookies = new CookieContainer(); this.handler = new HttpClientHandler(); this.handler.CookieContainer = cookies; this.httpClient = new HttpClient(this.handler); }
public async Task <UTResponse> TrackInteractionAsync(ITrackInteractionRequest request, CancellationToken cancelToken) { BaseValidator.CheckNullAndThrow(request, this.GetType().Name + ".request"); ITrackInteractionRequest requestCopy = request.DeepCopyTrackInteractionRequest(); ITrackInteractionRequest autocompletedRequest = this.requestMerger.FillTrackInteractionGaps(requestCopy); var urlBuilder = new TrackInteractionUrlBuilder <ITrackInteractionRequest>(this.utGrammar); var taskFlow = new TrackInteractionTask(urlBuilder, this.httpClient); var response = await RestApiCallFlow.LoadRequestFromNetworkFlow(autocompletedRequest, taskFlow, cancelToken); if (response.Successful) { //@igk order matters this.sessionConfig = new UTSessionConfig(this.sessionConfig.InstanceUrl, response.Description); this.requestMerger = new UserRequestMerger(this.sessionConfig, this.defaultDeviceIdentifier); } return(response); }