[HttpPost] // Send SMS
        public async Task <ActionResult <InfoUserSms> > Post(InfoUserSms info)
        {
            try
            {
                Logger?.Info($"Info of Message {JsonConvert.SerializeObject(info)}");
                var messageHandler = new MessageHandler();
                Logger?.Info("Type of Message is Receive");

                // Cancel Task after 5s
                TokenSource.CancelAfter(TimeSpan.FromSeconds(5));

                // Push Message to SMS Service
                var pushMessageSuccess = await messageHandler.ReceiveInfoMessageToNexmoService(info, TokenSource.Token);

                Logger?.Info($"Push message is {pushMessageSuccess.Message}");

                Logger?.Info($"Status Code {StatusCodes.Status401Unauthorized}");
                return(StatusCode(StatusCodes.Status401Unauthorized, "Don't have type SMS"));
            }
            catch (Exception ex)
            {
                Logger?.Exception(ex, $"Status Code {StatusCodes.Status500InternalServerError}");
                return(StatusCode(StatusCodes.Status500InternalServerError, "Database Failure"));
            }
        }
Exemple #2
0
        private async Task <BaseResponse <object> > SendInfoMessageBySms(InfoUserSms info, CancellationToken cancellationToken = default(CancellationToken))
        {
            try
            {
                if (string.IsNullOrEmpty(info.PhoneNumber))
                {
                    info.ErrorString   = "No Phone Number";
                    info.IsSendSuccess = 1;
                    return(Result(info));
                }

                var requestContent = new StringContent("", Encoding.UTF8, "application/json");

                using (var httpClient = new HttpClient())
                {
                    httpClient.DefaultRequestHeaders.ConnectionClose = true;
                    httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Accept", "application/json");
                    var putUriPath = SendSmsUri
                                     + $"?secret-key={info.SecretKey}&customer-id={info.CustomerId}&user-id={info.UserId}&phone-number={info.PhoneNumber}&person-id={info.UserId}&language-id={info.LanguageId}";

                    using (var httpResponse = await httpClient.PostAsync(new Uri(putUriPath), requestContent, cancellationToken).ConfigureAwait(false))
                    {
                        // Convert response content to string data
                        var serverResponse = await httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);

                        if (serverResponse.Contains("OK"))
                        {
                            info.IsSendSuccess = 1;
                        }

                        // Result
                        var data = JsonConvert.DeserializeObject <object>(serverResponse);
                        return(Result(data));
                    }
                }
            }
            catch (TaskCanceledException tEx)
            {
                Debug.WriteLine(tEx);
                info.ErrorString   = "Request Timeout: " + tEx;
                info.IsSendSuccess = 0;
                return(Result(info));
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.ToString());
                info.ErrorString   = ex.ToString();
                info.IsSendSuccess = 0;
                return(Result(info));
            }
            finally
            {
                // Save MongoDB
                Logger?.Info($"Insert value to DB");
                info.DateSend = ConvertDateTime.GetDateTimeNowUtc();
                _connect.InsertMessageDocumentAsync(info);
                Logger?.Info($"Value insert DB: {JsonConvert.SerializeObject(info)}");
            }
        }
Exemple #3
0
        private async Task <BaseResponse <object> > PushNotifyToClient(InfoUserSms info, CancellationToken cancellationToken = default(CancellationToken))
        {
            try
            {
                // Push to Firebase
                // TODO
                return(null);
            }
            catch (TaskCanceledException tEx)
            {
                Debug.WriteLine(tEx);
                if (!cancellationToken.IsCancellationRequested)
                {
                    throw;
                }

                info.ErrorString   = "Request Timeout: " + tEx;
                info.IsSendSuccess = 0;
                return(null);
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.ToString());
                info.ErrorString   = ex.ToString();
                info.IsSendSuccess = 0;
                return(null);
            }
            finally
            {
                // Save MongoDB
                Logger?.Info($"Insert value to DB");
                info.DateSend = ConvertDateTime.GetDateTimeNowUtc();
                _connect.InsertMessageDocumentAsync(info);
                Logger?.Info($"Value insert DB: {JsonConvert.SerializeObject(info)}");
            }
        }
        [HttpPost] // Send SMS
        public async Task <BaseResponse <object> > Post(InfoUserSms info)
        {
            try
            {
                Logger?.Info($"Info of Message {JsonConvert.SerializeObject(info)}");
                var messageHandler = new MessageHandler();

                //Cancel Task after 3s
                TokenSource.CancelAfter(TimeSpan.FromSeconds(3));

                //Push Message to SMS Service
                var sendSuccess = await messageHandler.SendInfoMessageToSmsService(info, TokenSource.Token);

                Logger?.Info($"Send message {JsonConvert.SerializeObject(sendSuccess)}");
                return(sendSuccess);
            }
            catch (Exception ex)
            {
                Logger?.Exception(ex, $"Status Code {StatusCodes.Status500InternalServerError}");
                return(new BaseResponse <object> {
                    Code = 500, Data = "Internal Server Error", Message = ex.Message, Error = ex.StackTrace
                });
            }
        }
        ///// <summary>
        ///// Get All Collection of Table
        ///// </summary>
        ///// <returns>List InfoUserSms</returns>
        //public async Task<List<InfoUserSms>> GetAllCollection()
        //{
        //    var listInfoUser = new List<InfoUserSms>();

        //    // Get all Data of Table
        //    await _collection.Find(new BsonDocument()).ForEachAsync(document =>
        //        {
        //            var info = GetDataOfTable(document);
        //            listInfoUser.Add(info);
        //        }
        //    );

        //    return listInfoUser;
        //}

        ///// <summary>
        ///// Get All Collection of Table with value Search
        ///// </summary>
        ///// <returns>List InfoUserSms</returns>
        //public async Task<List<InfoUserSms>> GetDataOfTableWithValueSearch(string keySearch, string value)
        //{
        //    var listInfoUser = new List<InfoUserSms>();
        //    var builder = Builders<BsonDocument>.Filter;
        //    var query = builder.Eq(keySearch, value);

        //    // Get all Data of Table
        //    await _collection.Find(query).ForEachAsync(document =>
        //        {
        //            var info = GetDataOfTable(document);
        //            listInfoUser.Add(info);
        //        }
        //    );

        //    return listInfoUser;
        //}

        ///// <summary>
        ///// Sort List with value Search
        ///// </summary>
        ///// <returns>List InfoUserSms</returns>
        ///// <param name="keySearch">Column want sort</param>
        ///// <param name="isSort">true: Ascending, false: Descending</param>
        //public async Task<List<InfoUserSms>> SortListWithValue(string keySearch, bool isSort = true)
        //{
        //    var listInfoUser = new List<InfoUserSms>();
        //    var sort = isSort ? Builders<BsonDocument>.Sort.Ascending(keySearch) : Builders<BsonDocument>.Sort.Descending(keySearch);

        //    // Get all Data of Table
        //    await _collection.Find(new BsonDocument()).Sort(sort).ForEachAsync(document =>
        //        {
        //            var info = GetDataOfTable(document);
        //            listInfoUser.Add(info);
        //        }
        //    );

        //    return listInfoUser;
        //}

        /// <summary>
        /// Insert Message Document on MongoDB
        /// </summary>
        /// <param name="info">Info Message</param>
        public async void InsertMessageDocumentAsync(InfoUserSms info)
        {
            // Insert Document
            await _collection.InsertOneAsync(info);
        }
Exemple #6
0
 public async Task <BaseResponse <object> > ReceiveInfoMessageToNexmoService(InfoUserSms info, CancellationToken cancellationToken = default(CancellationToken))
 {
     // Push Notify
     return(await PushNotifyToClient(info, cancellationToken));
 }
Exemple #7
0
 // Add Handle Message
 public async Task <BaseResponse <object> > SendInfoMessageToSmsService(InfoUserSms info, CancellationToken cancellationToken = default(CancellationToken))
 {
     // Send Service SMS Nexmo
     return(await SendInfoMessageBySms(info, cancellationToken));
 }