Ejemplo n.º 1
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
                });
            }
        }