public SmsResponse InterpretSms(SmsRequestExtended request) { var response = new SmsResponse(); try { response.Action = SmsResponseType.DoNothing; switch (request.SmsStatus) { case "delivered": HandleDeliveredSms(request); response.Action = SmsResponseType.DoNothing; break; case "received": HandleRecievedSms(request, response); break; } } catch (SmsException ex) { response.Action = SmsResponseType.SendResponse; response.SmsReponse = ex.Message; } catch (Exception ex) { response.Action = SmsResponseType.SendError; Log("Error: " + ex); } return response; }
private void HandleRecievedSms(SmsRequestExtended request, SmsResponse response) { // string reply; // var dbReply = _uow.SmsReplys.Find(replys => replys.Request == request.Body).FirstOrDefault(); // reply = dbReply != null ? dbReply.Reply : "That is wrong! Keep trying"; // response.SmsReponse = reply; // response.Action = SmsResponseType.SendResponse; long fromNum; if (!long.TryParse(new Regex(@"[^\d]").Replace(request.From, string.Empty).TrimStart(new[] { '1' }), out fromNum)) throw new SmsException("Error: please send message from a numeric phone number: " + request.From + " is not accepted"); var dbPerson = _uow .SmsPerson .Find(p => p.PhoneNumber == fromNum) .Include("SmsGroupLeaders.SmsGroup") .Include("SmsGroupMembers.SmsGroup") .FirstOrDefault(); if (dbPerson == null) throw new SmsException("Error: " + request.From + " is not a registered number"); _uow.SmsLogs.Add(new SmsLog { SmsPersonId = dbPerson.Id, Message = request.Body, SmsDate = DateTime.UtcNow, MessageType = SmsMessageType.Recieved, MessageStatus = "recieved", }); if (!dbPerson.SmsGroupLeaders.Any() && !dbPerson.SmsGroupMembers.Any()) throw new SmsException("Error: " + request.From + " is not registered to any groups"); if (dbPerson.SmsGroupMembers.Any(group => group.Id == 6) || dbPerson.SmsGroupLeaders.Any(group => group.Id == 6)) { response.Action = SmsResponseType.SendResponse; response.SmsReponse = "This is the old number for the young mens group, please use (831)232-3231"; return; } var leaders = SendToLeadersOfGroupsThatUserIsMemberOf(request, dbPerson); var members = SendToMembersOfGroupsUserIsLeaderOf(request, dbPerson); foreach (var message in leaders.Union(members).GroupBy(m => m.ToPerson.PhoneNumber).Select(m => m.First())) { this.SendSms(message); } response.Action = SmsResponseType.DoNothing; }
private void HandleRecievedSms(SmsRequestExtended request, SmsResponse response) { long fromNum; if (!long.TryParse(new Regex(@"[^\d]").Replace(request.From, string.Empty).TrimStart(new[] {'1'}), out fromNum)) throw new SmsException("Error: please send message from a numeric phone number: " + request.From + " is not accepted"); var dbPerson = _uow .SmsPerson .Find(p => p.PhoneNumber == fromNum) .Include("SmsGroupLeaders.SmsGroup") .Include("SmsGroupMembers.SmsGroup") .FirstOrDefault(); if (dbPerson == null) throw new SmsException("Error: " + request.From + " is not a registered number"); _uow.SmsLogs.Add(new SmsLog { SmsPersonId = dbPerson.Id, Message = request.Body, SmsDate = DateTime.UtcNow, MessageType = SmsMessageType.Recieved, MessageStatus = "recieved", }); if (!dbPerson.SmsGroupLeaders.Any() && !dbPerson.SmsGroupMembers.Any()) throw new SmsException("Error: " + request.From + " is not registered to any groups"); SendToLeadersOfGroupsThatUserIsMemberOf(request, dbPerson); SendToMembersOfGroupsUserIsLeaderOf(request, dbPerson); }