Ejemplo n.º 1
0
        /// <summary>
        /// Commit message
        /// Send the messages which are registered
        /// </summary>
        /// <param name="asynchronously">Commit message asynchronously</param>
        /// <returns>Return send result</returns>
        public static async Task <SendMessageResult> CommitAsync(bool asynchronously = true)
        {
            if (CurrentMessageBox?.Messages?.IsNullOrEmpty() ?? true)
            {
                return(SendMessageResult.MessageIsNullOrEmpty());
            }
            SendMessageResult sendMessageResult = null;
            var currentMessages = CurrentMessageBox.Messages.Select(c => c).ToList();

            CurrentMessageBox.Clear();
            if (asynchronously)
            {
                InternalQueueMessageItem messageInternalCommand = new InternalQueueMessageItem(MessageProvider, currentMessages, WorkManager.Current);
                InternalQueueManager.GetQueue(EZNEWConstants.InternalQueueNames.Message).Enqueue(messageInternalCommand);
                sendMessageResult = SendMessageResult.SendSuccess();
            }
            else
            {
                sendMessageResult = await(MessageProvider?.SendAsync(new SendMessageOptions()
                {
                    Messages = currentMessages
                }) ?? Task.FromResult(SendMessageResult.NoProvider())).ConfigureAwait(false);
            }
            return(sendMessageResult);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Send sms message
        /// </summary>
        /// <param name="smsAccount">Sms account</param>
        /// <param name="messageTemplate">Message template</param>
        /// <param name="message">Message</param>
        /// <param name="smsTag">Sms tag</param>
        /// <param name="mobiles">Mobiles</param>
        /// <param name="asynchronously">Whether send by asynchronously</param>
        /// <returns>Return send result</returns>
        public static async Task <SendMessageResult> SendSmsMessageAsync(SmsAccount smsAccount, MessageTemplate messageTemplate, MessageInfo message, string smsTag, IEnumerable <string> mobiles, bool asynchronously = true)
        {
            var msgResult = GetSmsOptions(messageTemplate, message, smsTag, mobiles, asynchronously, out var smsOptions);

            if (!msgResult.Success || smsOptions == null)
            {
                return(msgResult);
            }
            SendSmsResult smsSendResult = await SmsManager.SendAsync(smsAccount, smsOptions).ConfigureAwait(false);

            return(smsSendResult.Success ? SendMessageResult.SendSuccess() : SendMessageResult.SendFailed(smsSendResult.Description));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Send email message
        /// </summary>
        /// <param name="emailAccount">Email account</param>
        /// <param name="messageTemplate">Message template</param>
        /// <param name="message">Message</param>
        /// <param name="emailCategory">Email category</param>
        /// <param name="emails">Emails</param>
        /// <param name="asynchronously">Whether send by asynchronously</param>
        /// <returns>Return send result</returns>
        public static async Task <SendMessageResult> SendEmailMessageAsync(EmailAccount emailAccount, MessageTemplate messageTemplate, MessageInfo message, string emailCategory, IEnumerable <string> emails, bool asynchronously = true)
        {
            var msgResult = GetEmailOptions(messageTemplate, message, emailCategory, emails, asynchronously, out var emailOptions);

            if (!msgResult.Success || emailOptions == null)
            {
                return(msgResult);
            }
            SendEmailResult emailSendResult = (await EmailManager.SendAsync(emailAccount, emailOptions).ConfigureAwait(false))?.FirstOrDefault();

            return((emailSendResult?.Success ?? false) ? SendMessageResult.SendSuccess() : SendMessageResult.SendFailed(emailSendResult?.Message));
        }
Ejemplo n.º 4
0
        static SendMessageResult GetSmsOptions(MessageTemplate messageTemplate, MessageInfo message, string smsTag, IEnumerable <string> mobiles, bool asynchronously, out SendSmsOptions sendSmsOptions)
        {
            sendSmsOptions = null;
            if (messageTemplate == null)
            {
                throw new ArgumentNullException(nameof(MessageTemplate));
            }
            if (message == null)
            {
                throw new ArgumentNullException(nameof(MessageInfo));
            }
            if (string.IsNullOrWhiteSpace(messageTemplate.Content))
            {
                throw new Exception("The message template content is null or empty");
            }
            if (mobiles.IsNullOrEmpty())
            {
                throw new Exception("The mobiles is null or empty");
            }
            var parameterDict = message.Parameters?.ObjectToStringDcitionary();
            Dictionary <string, string> templateParameters = GetTemplateParameters(parameterDict);
            //content
            var contentResolveResult = ResolveTemplate(messageTemplate.Content, templateParameters);

            if (!contentResolveResult.Item1 || string.IsNullOrWhiteSpace(contentResolveResult.Item3))
            {
                if (!string.IsNullOrWhiteSpace(contentResolveResult.Item2))
                {
                    return(SendMessageResult.NoParameter($"Not set '{contentResolveResult.Item2}' value in the sms body template"));
                }
                return(SendMessageResult.MessageIsNullOrEmpty($"The sms body is null or empty"));
            }

            //Send sms
            sendSmsOptions = new SendSmsOptions()
            {
                Tag            = smsTag,
                Content        = contentResolveResult.Item3,
                Parameters     = parameterDict,
                Asynchronously = asynchronously,
                Mobiles        = mobiles,
            };
            sendSmsOptions.AddWorkId(message.WorkId);
            sendSmsOptions.AddTemplateMessageId(message.Id);
            return(SendMessageResult.SendSuccess());
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Send message
        /// </summary>
        /// <param name="options">Send message options</param>
        /// <returns>Return send result</returns>
        public async Task <SendMessageResult> SendAsync(SendMessageOptions options)
        {
            if (options?.Messages.IsNullOrEmpty() ?? true)
            {
                return(SendMessageResult.NoOptions());
            }
            Dictionary <string, List <MessageInfo> > messageGroups = new Dictionary <string, List <MessageInfo> >();

            foreach (var msg in options.Messages)
            {
                if (messageGroups.ContainsKey(msg.Type))
                {
                    messageGroups[msg.Type].Add(msg);
                }
                else
                {
                    messageGroups.Add(msg.Type, new List <MessageInfo>()
                    {
                        msg
                    });
                }
            }
            SendMessageResult sendResult = SendMessageResult.SendSuccess();

            foreach (var msgGroup in messageGroups)
            {
                var messageHandler = MessageManager.GetMessageHandler(msgGroup.Key);
                if (messageHandler == null)
                {
                    return(SendMessageResult.NoHandler(string.Format("Not set handler for {0}", msgGroup.Key)));
                }
                var executeResult = await messageHandler.SendAsync(new SendMessageContext()
                {
                    Messages = msgGroup.Value
                }).ConfigureAwait(false);

                if (!executeResult.Success)
                {
                    return(executeResult);
                }
                sendResult.Add(executeResult);
            }
            return(sendResult);
        }
Ejemplo n.º 6
0
        static SendMessageResult GetEmailOptions(MessageTemplate messageTemplate, MessageInfo message, string emailCategory, IEnumerable <string> emails, bool asynchronously, out SendEmailOptions sendEmailOptions)
        {
            sendEmailOptions = null;
            if (messageTemplate == null)
            {
                throw new ArgumentNullException(nameof(MessageTemplate));
            }
            if (message == null)
            {
                throw new ArgumentNullException(nameof(MessageInfo));
            }
            if (string.IsNullOrWhiteSpace(messageTemplate.Title))
            {
                throw new Exception("The message template title is null or empty");
            }
            if (string.IsNullOrWhiteSpace(messageTemplate.Content))
            {
                throw new Exception("The message template content is null or empty");
            }
            if (emails.IsNullOrEmpty())
            {
                throw new Exception("The emails is null or empty");
            }
            var parameterDict = message.Parameters?.ObjectToStringDcitionary();
            Dictionary <string, string> templateParameters = GetTemplateParameters(parameterDict);

            //title
            var titleResolveResult = ResolveTemplate(messageTemplate.Title, templateParameters);

            if (!titleResolveResult.Item1 || string.IsNullOrWhiteSpace(titleResolveResult.Item3))
            {
                if (!string.IsNullOrWhiteSpace(titleResolveResult.Item2))
                {
                    return(SendMessageResult.NoParameter($"Not set '{titleResolveResult.Item2}' value in the email title template"));
                }
                return(SendMessageResult.MessageIsNullOrEmpty($"The email title is null or empty"));
            }

            //content
            var contentResolveResult = ResolveTemplate(messageTemplate.Content, templateParameters);

            if (!contentResolveResult.Item1 || string.IsNullOrWhiteSpace(contentResolveResult.Item3))
            {
                if (!string.IsNullOrWhiteSpace(contentResolveResult.Item2))
                {
                    return(SendMessageResult.NoParameter($"Not set '{contentResolveResult.Item2}' value in the email body template"));
                }
                return(SendMessageResult.MessageIsNullOrEmpty($"The email body is null or empty"));
            }

            //Send email
            sendEmailOptions = new SendEmailOptions()
            {
                Category       = emailCategory,
                Content        = contentResolveResult.Item3,
                Subject        = titleResolveResult.Item3,
                Asynchronously = asynchronously,
                Emails         = emails
            };
            sendEmailOptions.AddWorkId(message.WorkId);
            sendEmailOptions.AddTemplateMessageId(message.Id);
            return(SendMessageResult.SendSuccess());
        }