Ejemplo n.º 1
0
        public async Task <UTResponse> CreateInteractionAndSentEventAsync(IUTEvent utEvent, CancellationToken cancelToken = default(CancellationToken))
        {
            UTResponse interactionResponse = null;


            Collection <IUTEvent> events = new Collection <IUTEvent>();

            events.Add(utEvent);

            var interaction = new UTInteraction
                              (
                this.defaultInteraction.CampaignId,
                this.defaultInteraction.ChannelId,
                events,
                this.defaultInteraction.Initiator,
                this.defaultInteraction.UserAgent,
                this.defaultInteraction.VenueId,
                this.defaultInteraction.Contact
                              );

            var interactionRequest = new TrackInteractionParameters(null, interaction);

            interactionResponse = await this.TrackInteractionAsync(interactionRequest, cancelToken);

            return(interactionResponse);
        }
Ejemplo n.º 2
0
        public void TestCancelLocationEvent()
        {
            double lat     = 37.342454;
            double lon     = -122.342454;
            var    request = UTRequestBuilder.LocationEvent(lat, lon)
                             .Build();


            var        cancelToken = CreateCancelTokenWithDelay(standardDelay);
            UTResponse response    = null;

            // do not use Task.WaitAll() since it may cause deadlocks
            TestDelegate testCode = async() =>
            {
                var task = this.session.TrackLocationEventAsync(request, cancelToken);
                response = await task;
            };

            var exception = Assert.Catch <OperationCanceledException>(testCode);

            Debug.WriteLine("Expected token : " + cancelToken);
            Debug.WriteLine("Received token : " + exception.CancellationToken);


            Assert.IsNull(response);
            //      Desktop (Windows) : "A task was canceled."
            //      iOS               : "The Task was canceled"
            Assert.IsTrue(exception.Message.ToLowerInvariant().Contains("task was canceled"));

            // CancellationToken class comparison or scheduling works differently on iOS
            // Assert.AreEqual(cancelToken, exception.CancellationToken);
        }
Ejemplo n.º 3
0
 private void CheckResponseForValidInteraction(UTResponse response)
 {
     //FIXME: @igk a special error code required!!!
     if (response.Errors != null && response.Errors.Count > 0 && response.Errors[0].Contains("not a valid tracking interaction ID"))
     {
         this.sessionConfig = new UTSessionConfig(this.sessionConfig.InstanceUrl);
     }
 }
Ejemplo n.º 4
0
        public async Task <UTResponse> TrackEventAsync(ITrackEventRequest request, CancellationToken cancelToken = default(CancellationToken))
        {
            BaseValidator.CheckNullAndThrow(request, this.GetType().Name + ".EventRequest ");

            ITrackEventRequest requestCopy = request.DeepCopyTrackEventRequest();

            ITrackEventRequest autocompletedRequest = this.requestMerger.FillTrackEventGaps(requestCopy);

            if (this.InteractionNotExists())
            {
                UTResponse uTResponse = await this.CreateInteractionAndSentEventAsync(request.Event, cancelToken);

                return(uTResponse);
            }

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

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

            this.CheckResponseForValidInteraction(response);

            return(response);
        }