[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")); } }
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)}"); } }
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); }
public async Task <BaseResponse <object> > ReceiveInfoMessageToNexmoService(InfoUserSms info, CancellationToken cancellationToken = default(CancellationToken)) { // Push Notify return(await PushNotifyToClient(info, cancellationToken)); }
// Add Handle Message public async Task <BaseResponse <object> > SendInfoMessageToSmsService(InfoUserSms info, CancellationToken cancellationToken = default(CancellationToken)) { // Send Service SMS Nexmo return(await SendInfoMessageBySms(info, cancellationToken)); }