Пример #1
0
 internal static async Task InsertBulkMessagePayload(MessagePayload messagePayload)
 {
     try
     {
         DB_MessagePayload dB_MessagePayload = new DB_MessagePayload(messagePayload);
         await Resources.GetInstance().BulkMessagePayloadCollection.InsertOneAsync(dB_MessagePayload);
     }
     catch (Exception ex)
     {
         await FlushLogs(new List <LogEvent> {
             CreateLogEvent(null, IRDLM.InternalException(ex))
         });
     }
 }
Пример #2
0
        public async Task ProcessSingleMessage(QueueData queueData)
        {
            MessagePayload messagePayload = new MessagePayload(queueData);

            try
            {
                messagePayload.Validate();
                if (!messagePayload.IsProcessable)
                {
                    return;
                }

                messagePayload.ConfigureChannel();
                if (messagePayload.IsEmailDelivery == null)
                {
                    return;
                }

                await messagePayload.ConfigureUserData();

                if (!messagePayload.IsUserDataLogEventConfigured)
                {
                    return;
                }

                try
                {
                    messagePayload.PrepareForHashLookUps();

                    messagePayload.ConfigureVendor();
                    if (!messagePayload.IsVendorConfigured)
                    {
                        return;
                    }

                    messagePayload.ConfigureVendorFlag();
                    if (messagePayload.Vendor.IsBulkVendor)
                    {
                        await Utils.InsertBulkMessagePayload(messagePayload);

                        return;
                    }

                    SingleDispatch singleDispatch = new SingleDispatch();
                    singleDispatch = new SingleDispatch {
                        MessagePayload = messagePayload
                    };
                    singleDispatch.ConfigureDispatchVendor();
                    if (!singleDispatch.IsDispatcConfigured)
                    {
                        return;
                    }
                    await singleDispatch.DispatchReadyVendor.RunAsync(singleDispatch.MessagePayload);
                }
                catch (Exception ex)
                {
                    messagePayload.LogEvents.Add(Utils.CreateLogEvent(messagePayload.QueueData, IRDLM.InternalException(ex)));
                    messagePayload.InvitationLogEvents.Add(Utils.CreateInvitationLogEvent(EventAction.DispatchUnsuccessful,
                                                                                          messagePayload.IsEmailDelivery.Value ? EventChannel.Email : EventChannel.SMS, messagePayload.QueueData, IRDLM.InternalException(ex)));
                }
            }
            catch (Exception ex)
            {
                messagePayload.LogEvents.Add(Utils.CreateLogEvent(queueData, IRDLM.InternalException(ex)));
            }
            finally
            {
                await Utils.FlushLogs(new List <MessagePayload> {
                    messagePayload
                });
            }
        }
Пример #3
0
        public async Task ProcessMultipleMessage(bool isLate)
        {
            List <LogEvent> logEvents = new List <LogEvent>();

            logEvents.Add(Utils.CreateLogEvent(null, IRDLM.TimeTriggerStart));
            if (isLate)
            {
                logEvents.Add(Utils.CreateLogEvent(null, IRDLM.TimeTriggerRunningLate));
            }
            List <MessagePayload>    messagePayloads    = new List <MessagePayload>();
            List <DB_MessagePayload> dB_MessagePayloads = await Utils.ReadBulkMessagePayloads();

            if (dB_MessagePayloads.Count > 0)
            {
                try
                {
                    await Utils.UpdateBulkMessagePayloads(dB_MessagePayloads);

                    Dictionary <string, List <MessagePayload> > ListOfMessagePayloadsByTemplateId = new Dictionary <string, List <MessagePayload> >();
                    foreach (DB_MessagePayload dB_MessagePayload in dB_MessagePayloads)
                    {
                        MessagePayload messagePayload = JsonConvert.DeserializeObject <MessagePayload>(dB_MessagePayload.MessagePayload);
                        messagePayloads.Add(messagePayload);
                        messagePayload.LogEvents.Add(Utils.CreateLogEvent(messagePayload.QueueData, IRDLM.ReadFromDB));
                        if (!ListOfMessagePayloadsByTemplateId.ContainsKey(messagePayload.QueueData.TemplateId))
                        {
                            ListOfMessagePayloadsByTemplateId.Add(messagePayload.QueueData.TemplateId, new List <MessagePayload>());
                        }
                        ListOfMessagePayloadsByTemplateId[messagePayload.QueueData.TemplateId].Add(messagePayload);
                    }
                    foreach (KeyValuePair <string, List <MessagePayload> > messagePayloadsByTemplateId in ListOfMessagePayloadsByTemplateId)
                    {
                        BulkDispatch bulkDispatch = null;
                        try
                        {
                            bulkDispatch = new BulkDispatch {
                                MessagePayloads = messagePayloadsByTemplateId.Value
                            };
                            bulkDispatch.ConfigureDispatchVendor();
                            if (!bulkDispatch.IsDispatchConfigured)
                            {
                                continue;
                            }
                            await bulkDispatch.DispatchReadyVendor.RunAsync(bulkDispatch.MessagePayloads);
                        }
                        catch (Exception ex)
                        {
                            bulkDispatch.MessagePayloads.ForEach(x => x.LogEvents.Add(Utils.CreateLogEvent(x.QueueData, IRDLM.InternalException(ex))));
                            bulkDispatch.MessagePayloads.ForEach(x => x.InvitationLogEvents.Add(Utils.CreateInvitationLogEvent(EventAction.DispatchUnsuccessful,
                                                                                                                               x.IsEmailDelivery.Value ? EventChannel.Email : EventChannel.SMS, x.QueueData, IRDLM.InternalException(ex))));
                        }
                    }
                }
                catch (Exception ex)
                {
                    logEvents.Add(Utils.CreateLogEvent(null, IRDLM.InternalException(ex)));
                }
                finally
                {
                    await Utils.DeleteBulkMessagePayloads(dB_MessagePayloads);

                    await Utils.FlushLogs(messagePayloads);
                }
            }
            logEvents.Add(Utils.CreateLogEvent(null, IRDLM.TimeTriggerEnd(dB_MessagePayloads.Count)));
            await Utils.FlushLogs(logEvents);
        }