/// <inheritdoc/> public ReadOnlyCollection <MixpanelBatchMessageTest> SendTest(IEnumerable <MixpanelMessage> messages) { var batchMessageWrapper = new BatchMessageWrapper(messages); // Concatenate both 'TrackMessages' and 'EngageMessages' in one list List <List <MixpanelMessage> > batchMessages = (batchMessageWrapper.TrackMessages ?? new List <List <MixpanelMessage> >(0)) .Concat(batchMessageWrapper.EngageMessages ?? new List <List <MixpanelMessage> >(0)) .ToList(); var testMessages = new List <MixpanelBatchMessageTest>(batchMessages.Count); foreach (List <MixpanelMessage> batchMessage in batchMessages) { var batchMessageBuildResult = new BatchMessageBuildResult(batchMessage); var testMessage = new MixpanelBatchMessageTest { Data = batchMessageBuildResult.Message }; try { testMessage.Json = ToJson(testMessage.Data); testMessage.Base64 = ToBase64(testMessage.Json); } catch (Exception e) { testMessage.Exception = e; } testMessages.Add(testMessage); } return(testMessages.AsReadOnly()); }
/// <inheritdoc/> public async Task <SendResult> SendAsync(IEnumerable <MixpanelMessage> messages) { var resultInternal = new SendResultInternal(); var batchMessage = new BatchMessageWrapper(messages); await SendBatches(MixpanelMessageEndpoint.Track, batchMessage.TrackMessages); await SendBatches(MixpanelMessageEndpoint.Engage, batchMessage.EngageMessages); return(resultInternal.ToRealSendResult()); async Task SendBatches(MixpanelMessageEndpoint endpoint, List <List <MixpanelMessage> > batches) { if (batches == null) { return; } foreach (List <MixpanelMessage> batch in batches) { bool success = await SendMessageInternalAsync( endpoint, () => new BatchMessageBuildResult(batch)); resultInternal.Update(success, batch); } } }
/// <summary> /// Returns a collection of <see cref="MixpanelBatchMessageTest"/>. Each item represents a /// batch that contains all steps (message data, JSON, base64) of building a batch message. /// If some error occurs during the process of creating a batch it can be found in /// <see cref="MixpanelMessageTest.Exception"/> property. /// The messages will NOT be sent to Mixpanel. /// </summary> /// <param name="messages">List of <see cref="MixpanelMessage"/> to test.</param> public ReadOnlyCollection<MixpanelBatchMessageTest> SendTest(IEnumerable<MixpanelMessage> messages) { var batchMessageWrapper = new BatchMessageWrapper(messages); // Concatenate both 'TrackMessages' and 'EngageMessages' in one list var batchMessages = (batchMessageWrapper.TrackMessages ?? new List<List<MixpanelMessage>>(0)) .Concat(((batchMessageWrapper.EngageMessages ?? new List<List<MixpanelMessage>>(0)))) .ToList(); var testMessages = new List<MixpanelBatchMessageTest>(batchMessages.Count); foreach (var batchMessage in batchMessages) { var testMessage = new MixpanelBatchMessageTest { Data = GetBatchMessageData(batchMessage) }; try { testMessage.Json = ToJson(testMessage.Data); testMessage.Base64 = ToBase64(testMessage.Json); } catch (Exception e) { testMessage.Exception = e; } testMessages.Add(testMessage); } return testMessages.AsReadOnly(); }
/// <summary> /// Sends messages passed in <paramref name="messages"/> parameter to Mixpanel. /// If <paramref name="messages"/> contains both track (Track and Alias) and engage (People*) /// messages then they will be devided in 2 batches and will be sent separately. /// If amount of messages of one type exceeds 50, then messages will be devided in batches /// and will be sent separately. /// Returns a <see cref="SendResult"/> object that contains lists uf success and failed batches. /// </summary> /// <param name="messages">List of <see cref="MixpanelMessage"/> to send.</param> public async Task<SendResult> SendAsync(IEnumerable<MixpanelMessage> messages) { var resultInternal = new SendResultInernal(); var batchMessage = new BatchMessageWrapper(messages); List<List<MixpanelMessage>> batchTrackMessages = batchMessage.TrackMessages; if (batchTrackMessages != null) { foreach (var trackMessages in batchTrackMessages) { var msgs = trackMessages; bool success = await SendMessageInternalAsync( () => GetBatchMessageData(msgs), EndpointTrack, MessageKind.Batch); resultInternal.Update(success, msgs); } } List<List<MixpanelMessage>> batchEngageMessages = batchMessage.EngageMessages; if (batchEngageMessages != null) { foreach (var engageMessages in batchEngageMessages) { var msgs = engageMessages; bool success = await SendMessageInternalAsync( () => GetBatchMessageData(msgs), EndpointEngage, MessageKind.Batch); resultInternal.Update(success, msgs); } } return resultInternal.ToRealSendResult(); }
public async Task<bool> SendAsync(IEnumerable<MixpanelMessage> messages) { var batchMessage = new BatchMessageWrapper(messages); if (batchMessage.TrackMessages != null) { foreach (var batchTrackMessage in batchMessage.TrackMessages) { List<IDictionary<string, object>> message = batchTrackMessage; if (!(await SendMessageInternalAsync(() => message, EndpointTrack, MessageKind.Batch))) { return false; } } } if (batchMessage.EngageMessages != null) { foreach (var batchEngageMessage in batchMessage.EngageMessages) { List<IDictionary<string, object>> message = batchEngageMessage; if (!(await SendMessageInternalAsync(() => message, EndpointEngage, MessageKind.Batch))) { return false; } } } return true; }
public bool Send(IEnumerable<MixpanelMessage> messages) { var batchMessage = new BatchMessageWrapper(messages); if (batchMessage.TrackMessages != null) { if (batchMessage.TrackMessages .Any(msg => !SendMessageInternal(() => msg, EndpointTrack, MessageKind.Batch))) { return false; } } if (batchMessage.EngageMessages != null) { if (batchMessage.EngageMessages .Any(msg => !SendMessageInternal(() => msg, EndpointEngage, MessageKind.Batch))) { return false; } } return true; }