예제 #1
0
        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;
        }
예제 #2
0
        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;
        }
예제 #3
0
        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);
        }