using System.Configuration;
using MYBulk.Data.Agents.SDPServices;
namespace MYBulk.Data.Agents
private static readonly EnterpriseLogger _logger;
private static readonly TextFileCache _digiResponseUrlCache;
private static readonly string _responseUrlFilePath;
private static readonly int _requestTimeout;
private static readonly int _concatMTBufferMS;
private bool _isWorkDoneBeforeTimeout;
private StringBuilder _textLog;
public DigiAgent(StringBuilder textLog)
_isWorkDoneBeforeTimeout = false;
_logger = EnterpriseLogger.Instance;
_responseUrlFilePath = ConfigurationManager.AppSettings["ResponseUrlFilePath"];
if (!int.TryParse(ConfigurationManager.AppSettings["RequestTimeOut"], out _requestTimeout))
if (!string.IsNullOrWhiteSpace(_responseUrlFilePath))
_digiResponseUrlCache = new TextFileCache("DigiResponseUrl", _responseUrlFilePath);
_digiResponseUrlCache.PreserveCacheOnFailures = true;
if (!int.TryParse(ConfigurationManager.AppSettings["ConcatMTBufferMS"], out _concatMTBufferMS))
public void SendSMS(DigiTransaction digiTransaction)
SDPServicesInterfaceClient proxy = new SDPServicesInterfaceClient();
_textLog.Append(EnterpriseLogger.CurrentDateTime).Append(" - Request:").AppendLine(digiTransaction.ToString());
SMSContent[] smsContents = new SMSContent[digiTransaction.Messages.Count];
for (int i = 0; i < digiTransaction.Messages.Count; i++)
SMSContent smsContent = new SMSContent();
smsContent.ucp_msg_type = "3";
smsContent.ucp_data_coding_id = string.Empty;
smsContent.ucp_msg_class = string.Empty;
if (digiTransaction.MessageType == Entities.Enum.MessageType.Unicode)
smsContent.ucp_msg_type = "4";
smsContent.ucp_data_coding_id = "8";
smsContent.content = digiTransaction.Messages[i];
smsContents[i] = smsContent;
_textLog.Append(EnterpriseLogger.CurrentDateTime).AppendFormat(" - smsContent: ucp_msg_type:{0} | ucp_data_coding_id:{1} | ucp_msg_class:{2} | content:{3}", smsContent.ucp_msg_type, smsContent.ucp_data_coding_id, smsContent.ucp_msg_class, smsContent.content).AppendLine();
string msisdn = digiTransaction.MSISDN.ToString();
if (msisdn.StartsWith("6"))
msisdn = msisdn.Substring(1);
digiTransaction.SmsDate = DateTime.Now;
foreach (var smsContent in smsContents)
using (var smsTask = proxy.SmsBulkAsync(digiTransaction.LoginName, digiTransaction.EncryptedServiceID,
digiTransaction.CPID, msisdn, digiTransaction.Sender, digiTransaction.MID.ToString(),
digiTransaction.NotiIndicator, digiTransaction.ResponseURL, new ArrayOfSMSContent { smsContent }, null))
_isWorkDoneBeforeTimeout = smsTask.Wait(_requestTimeout);
if (_isWorkDoneBeforeTimeout)
SDPResult sdpResult = smsTask.Result.Body.@return;
digiTransaction.TransactionID = sdpResult.transaction_id;
digiTransaction.ErrorCode = sdpResult.error_code;
digiTransaction.ErrorList = sdpResult.error_list;
digiTransaction.Description = digiTransaction.ErrorCode.ToString();
_textLog.Append(EnterpriseLogger.CurrentDateTime).AppendFormat(
" - Response:TransactionID:{0} | ErrorCode:{1} | ErrorDescription:{2} | ErrorList:{3} | SuccessList:{4}",
sdpResult.transaction_id, sdpResult.error_code, sdpResult.error_desc, sdpResult.error_list, sdpResult.success_list)
_textLog.Append(EnterpriseLogger.CurrentDateTime).AppendLine(" - Request:Timeout");
throw new TimeoutException();
if (smsContents.Length > 1)
Thread.Sleep(TimeSpan.FromMilliseconds(_concatMTBufferMS));
public string GetResponseURL()
bool isHitException = false;
result = _digiResponseUrlCache.Get().FirstOrDefault();
result = ReadFromTextFile();
private string ReadFromTextFile()
result = FileReaderExtension.ReadFromTextFile(_responseUrlFilePath).FirstOrDefault();