public ITrackCampaignRequest FillTrackCampaignGaps(ITrackCampaignRequest userRequest)
        {
            var utCampaign = userRequest.Campaign.DeepCopyUTCampaign();

            //order matters!
            IUTSessionConfig mergedSessionConfig = this.SessionConfigMerger.FillSessionConfigGaps(userRequest.SessionConfig);

            var utEvent = this.ApplyActiveInteraction(utCampaign, mergedSessionConfig);

            utEvent = this.ApplyDeviceIdentifier(utEvent);

            utCampaign = new UTCampaign(utEvent, utCampaign.CampaignDefinitionId);

            return(new TrackCampaignParameters(mergedSessionConfig, utCampaign));
        }
示例#2
0
        public async Task <UTResponse> TrackCampaignEventAsync(ITrackCampaignRequest request, CancellationToken cancelToken = default(CancellationToken))
        {
            BaseValidator.CheckNullAndThrow(request, this.GetType().Name + ".CampaignRequest");

            ITrackCampaignRequest requestCopy = request.DeepCopyTrackCampaignRequest();

            ITrackCampaignRequest autocompletedRequest = this.requestMerger.FillTrackCampaignGaps(requestCopy);

            //FIXME: @igk
            if (this.InteractionNotExists())
            {
                return(await this.CreateInteractionAndSentEventAsync(request.Campaign, cancelToken));
            }

            var urlBuilder = new TrackEventUrlBuilder <ITrackCampaignRequest>(this.utGrammar);
            var taskFlow   = new TrackCampaignTask(urlBuilder, this.httpClient);

            var response = await RestApiCallFlow.LoadRequestFromNetworkFlow(autocompletedRequest, taskFlow, cancelToken);

            this.CheckResponseForValidInteraction(response);

            return(response);
        }