/// <summary> /// Set timer on the basis of Response and set request Model /// </summary> /// <param name="MobileNumber"></param> /// <param name="Code"></param> /// <param name="CountryName"></param> /// <param name="IsSmsSuccessfull"></param> /// <param name="ErrorMessage"></param> public async void StartTimer(string MobileNumber, string Code, string CountryName, Boolean IsSmsSuccessfull, string ErrorMessage) { try { if (Code == null) { return; } MyAttempts = 3; PendingSMSRequestModel requestModel = new PendingSMSRequestModel() { CountryName = CountryName, SenderPhoneNumber = MobileNumber, IsoCodes = Code, IsSmsSuccessfull = IsSmsSuccessfull, ErrorMessage = ErrorMessage, SmsRequestId = SmsRequestUniqueId }; PendingSmsResponseModel response = await RequestServer.SendingCordinates(requestModel); if (response == null || response.IsValid == false) { if (!(response == null)) { AccessUI accessUi = new AccessUI(); accessUi.ShowToast(response.Error); } //Delegate ElapsedEventHandler adding reference of Method to it SmsRequestUniqueId = 0; dn = new ElapsedEventHandler((sender, e) => MyTimer_Elapsed(sender, e, requestModel)); myTimer.Elapsed += dn; myTimer.Interval = 10000; myTimer.Enabled = true; } //If request exist on server else if (response.IsRequestexist) { AccessUI accessUi = new AccessUI(); accessUi.ShowToast(response.Error); SmsRequestUniqueId = response.SmsRequestId; sendSMS(response.PhoneNumber, response.Code); } else { AccessUI accessUi = new AccessUI(); accessUi.ShowToast(response.Error); // Set the Interval to 2 seconds (2000 milliseconds). SmsRequestUniqueId = 0; dn = new ElapsedEventHandler((sender, e) => MyTimer_Elapsed(sender, e, requestModel)); myTimer.Elapsed += dn; myTimer.Interval = response.EstimatedTimeToComeAgain * 1000; myTimer.Enabled = true; } } catch (Exception ex) { AccessUI accessUi = new AccessUI(); accessUi.ShowToast(ex.Message); } }
/// <summary> /// Timer Invoked Method /// </summary> /// <param name="sender"></param> /// <param name="e"></param> /// <param name="requestModel"></param> private void MyTimer_Elapsed(object sender, ElapsedEventArgs e, PendingSMSRequestModel requestModel) { try { Android.Util.Log.Info("date: ", e.SignalTime.ToString()); Timer timer = (Timer)sender; // Get the timer that fired the event timer.Elapsed -= dn; timer.Enabled = false; StartTimer(requestModel.SenderPhoneNumber, requestModel.IsoCodes, requestModel.CountryName, false, null); } catch (Exception ex) { AccessUI accessUi = new AccessUI(); accessUi.ShowToast(ex.Message); } }
/// <summary> /// Method to send SMS . If Failed then Invoked Three times /// </summary> /// <param name="PhoneNumber"></param> /// <param name="Code"></param> /// <returns></returns> public bool sendSMS(string PhoneNumber, int Code) { try { phoneNumberAndCodeDictionary.Clear(); phoneNumberAndCodeDictionary.Add(PhoneNumber, Code); if (MyAttempts > 0) { sentPI = PendingIntent.GetBroadcast(this, 0, new Intent(SENT), 0); //When sms sent OS broadcast and this object gets that broadcast message and fires on receive message SmsManager.Default.SendTextMessage(PhoneNumber, null, Code.ToString(), sentPI, null); MyAttempts--; return true; } return false; } catch (Exception ex) { AccessUI accessUi = new AccessUI(); accessUi.ShowToast(ex.Message); return true; } }
/// <summary> /// Send Request to Web APi /// </summary> /// <param name="requestModel"></param> /// <returns></returns> async public static Task<PendingSmsResponseModel> SendingCordinates(PendingSMSRequestModel requestModel) { try { PendingSmsResponseModel responseModel = new PendingSmsResponseModel(); HttpClient client = new HttpClient(); client.BaseAddress = ServerRootURL; client.DefaultRequestHeaders.Add("Accept", "application/json"); client.Timeout = TimeSpan.FromMinutes(100); string ConcatenatedSrtig = JsonConvert.SerializeObject(requestModel); StringContent requestContent = new StringContent(ConcatenatedSrtig); requestContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"); HttpResponseMessage response = await client.PostAsync(ServerLocation + "pendingverification", requestContent); if (response.IsSuccessStatusCode) { string responseData = await response.Content.ReadAsStringAsync(); responseModel = JsonConvert.DeserializeObject<PendingSmsResponseModel>(responseData); return responseModel; } else { //Check if Any server Error HTTPValidation validation = new HTTPValidation(); bool IsServerError = validation.IsServerError(response.StatusCode); string Message =validation.GetError("", IsServerError); AccessUI accessUi = new AccessUI(); accessUi.ShowToast(Message); return null; } } catch (TaskCanceledException) //TimeOut Excecption { string Message = ""; HTTPValidation validation = new HTTPValidation(); Message = validation.GetError(""); AccessUI accessUi = new AccessUI(); accessUi.ShowToast(Message); return null; } catch (WebException) //Internet Failure { string Message = ""; HTTPValidation validation = new HTTPValidation(); Message = validation.GetError(""); AccessUI accessUi = new AccessUI(); accessUi.ShowToast(Message); return null; } catch (System.Exception ex) //General Exception { AccessUI accessUi = new AccessUI(); accessUi.ShowToast(ex.Message); return null; } }