예제 #1
0
        public async Task <AppCore.Result> CheckCredit(Model.Account account, Model.MessageReceiver recMessage)
        {
            var sendCount = QueueHelper.Instance.SendCountDictionary[recMessage.SourceAccount];

            if (sendCount % account.CreditAlertCount == 0)
            {
                var creditValue = await _GetCreditValue(account, recMessage);

                if (!creditValue.Success)
                {
                    return(creditValue);
                }

                if (creditValue.Data <= account.AlertCreditAmount)
                {
                    var sendAlertResult = await _SendAlertAsync(account, recMessage, creditValue.Data);

                    if (!sendAlertResult.Success)
                    {
                        return(sendAlertResult);
                    }
                }
            }

            QueueHelper.Instance.SendCountDictionary[recMessage.SourceAccount] = ++sendCount;
            return(AppCore.Result.Successful());
        }
예제 #2
0
        public async Task <AppCore.Result <long> > SendAsync(Model.MessageReceiver recMsg, Model.Account account)
        {
            var result = (await _sms.enqueueAsync(
                              userName: account.UserName
                              , password: account.Password
                              , domain: account.Domain
                              , useProxy: false
                              , proxyAddress: string.Empty
                              , proxyUsername: string.Empty
                              , proxyPassword: string.Empty
                              , count: 1
                              , senderNumber: account.Number
                              , recipientNumber: recMsg.ReceiverNumber
                              , text: recMsg.Content
                              ))[0];

            string finalResult;

            if (result < ErrorCodes.MAX_VALUE)
            {
                finalResult = "Error code: " + result + ", " + ErrorCodes.getDescriptionForCode((int)result);
                return(AppCore.Result <long> .Failure(code : (int)result, message : finalResult, data : result));
            }
            else
            {
                finalResult = result.ToString();
            }

            return(AppCore.Result <long> .Set(success : true, code : (int)result, data : result, message : finalResult));
        }
예제 #3
0
        private async Task <AppCore.Result> _SendAlertAsync(Model.Account account, Model.MessageReceiver recMessage, decimal remainingCredit)
        {
            var sendResult = await _messageService.SendAsync(new Message()
            {
                Content = $"اعتبار اکانت سامانه اس ام اس در حال اتمام است لطفا در اسرع وقت نسبت به شارژ آن اقدام نمایید"
                          + $"{remainingCredit} : باقی مانده شارژ حساب اس ام اسی"
                ,
                Priority = Priority.VeryHigh
                ,
                SourceAccount = recMessage.SourceAccount
                ,
                ReceiverNumbers = account.AdminNumbers.Select(s => s.Number).ToList()
            });

            return(AppCore.Result.Successful());
        }
예제 #4
0
        private async Task <AppCore.Result> _SendAsync(Model.MessageReceiver recMsg)
        {
            var account = await _accountDataSource.GetAsync(recMsg.SourceAccountID);

            if (!account.Success)
            {
                return(AppCore.Result.Failure(message: account.Message, code: account.Code));
            }

            AppCore.Result <long> sendResult;
            sendResult = await _outgoingService.SendAsync(recMsg, account.Data);

            if (sendResult.Success)
            {
                var checkCredit = await _credentialService.CheckCredit(account.Data, recMsg);

                //if(!checkCredit.Success)
                //log goes here
            }
            return(sendResult);
        }
예제 #5
0
 private Task <AppCore.Result <decimal> > _GetCreditValue(Model.Account account, Model.MessageReceiver recMessage)
 => _outgoingService.GetCredit(account);