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); }
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); }
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); } }
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); }