private bool ParseMessages(string input, out ShortMessageCollection messages)
        {
            messages = new ShortMessageCollection();

            try
            {
                Regex r = new Regex(@"\+CMGL: (\d+),""(.+)"",""(.+)"",(.*),""(.+)""\r\n(.+)\r\n");

                Match m = r.Match(input);

                while (m.Success)
                {
                    ShortMessage msg = new ShortMessage(m.Groups[1].Value, m.Groups[2].Value, m.Groups[3].Value,
                                                        m.Groups[4].Value, m.Groups[5].Value, m.Groups[6].Value);

                    messages.Add(msg);

                    m = m.NextMatch();
                }
            }
            catch (Exception ex)
            {
                messages = null;

                return(false);
            }

            return(true);
        }
Exemple #2
0
        public ShortMessageCollection ParseMessages(string input)
        {
            ShortMessageCollection messages = new ShortMessageCollection();

            try
            {
                Regex r = new Regex(@"\+CMGL: (\d+),""(.+)"",""(.+)"",(.*),""(.+)""\r\n(.+)\r\n");
                Match m = r.Match(input);
                while (m.Success)
                {
                    ShortMessage msg = new ShortMessage();
                    //msg.Index = int.Parse(m.Groups[1].Value);
                    msg.Index    = m.Groups[1].Value;
                    msg.Status   = m.Groups[2].Value;
                    msg.Sender   = m.Groups[3].Value;
                    msg.Alphabet = m.Groups[4].Value;
                    msg.Sent     = m.Groups[5].Value;
                    msg.Message  = m.Groups[6].Value;
                    messages.Add(msg);

                    m = m.NextMatch();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return(messages);
        }
        public ShortMessageCollection CheckForNewMessage(bool readSIM)
        {
            ShortMessageCollection result = new ShortMessageCollection();

            ShortMessageCollection messages;

            if (ReadTextMessage(out messages, readSIM))
            {
                foreach (ShortMessage item in messages)
                {
                    if (item.Status == "REC UNREAD")
                    {
                        result.Add(item);
                    }
                }
            }

            return(result);
        }
        public ShortMessageCollection ParseMessages(string input)
        {
            ShortMessageCollection messages = new ShortMessageCollection();
            Regex r = new Regex(@"\+CMGL: (\d+),""(.+)"",""(.+)"",(.*),""(.+)""\r\n(.+)\r\n");
            Match m = r.Match(input);

            while (m.Success)
            {
                ShortMessage msg = new ShortMessage();
                msg.Index    = m.Groups[1].Value;  // Disable - temp pa 25/09/15
                msg.Status   = m.Groups[2].Value;
                msg.Sender   = m.Groups[3].Value;
                msg.Alphabet = m.Groups[4].Value;
                msg.Sent     = m.Groups[5].Value;
                msg.Message  = m.Groups[6].Value;
                messages.Add(msg);

                m = m.NextMatch();
            }

            return(messages);
        }
Exemple #5
0
        public ShortMessageCollection ParseMessages(string input)
        {
            ShortMessageCollection messages = new ShortMessageCollection();

            try
            {
                Regex r = new Regex(@"\+CMGL: (\d+),""(.+)"",""(.+)"",(.*),""(.+)""\r\n(.+)\r\n");
                Match m = r.Match(input);
                while (m.Success)
                {
                    ShortMessage msg = new ShortMessage();

                    //msg.Index = int.Parse(m.Groups[1].Value);
                    msg.Index = m.Groups[1].Value;
                    msg.Status = m.Groups[2].Value;
                    msg.Sender = m.Groups[3].Value;
                    msg.Alphabet = m.Groups[4].Value;
                    msg.Sent = m.Groups[5].Value;
                    msg.Message = m.Groups[6].Value;

                    messages.Add(msg);

                    m = m.NextMatch();
                }

            }
            catch (Exception ex)
            {
                throw ex;
            }
            return messages;
        }
Exemple #6
0
        public ShortMessageCollection ParseMessages(string input)
        {
            ShortMessageCollection messages = new ShortMessageCollection();
            try
            {
                //Regex r = new Regex(@"\+CMGL: (\d+),""(.+)"",""(.+)"",(.*),""(.+)""\r\n(.+)\r\n");

                String inputAux = input;
                inputAux = inputAux.Replace("\r\n", @"\x");
                inputAux = inputAux.Replace("\n", "");
                inputAux = inputAux.Replace(@"\x", "\r\n");
                Regex r = new Regex(@"\+CMGL: (\d+),""(.+)"",""(.+)"",(.*),""(.+)""\r\n(.+)\r\n"); ;
                Match m = r.Match(inputAux);
                while (m.Success)
                {
                    ShortMessage msg = new ShortMessage();
                    //msg.Index = int.Parse(m.Groups[1].Value);
                    msg.Index = m.Groups[1].Value;
                    msg.Status = m.Groups[2].Value;
                    msg.Sender = m.Groups[3].Value;
                    msg.Alphabet = m.Groups[4].Value;
                    msg.Sent = m.Groups[5].Value;
                    msg.Message = m.Groups[6].Value;
                    messages.Add(msg);

                    m = m.NextMatch();
                }

            }
            catch (Exception ex)
            {
                //_logger.Error("ParseMessages", ex);
                _causa = ex.Message;
                Console.WriteLine("ParseMessages " + ex.Message);
            }
            return messages;
        }
        private ShortMessageCollection ParseMessages(string input)
        {
            ShortMessageCollection messages = new ShortMessageCollection();
            Regex r = new Regex(@"\+CMGL: (\d+),""(.+)"",""(.+)"",(.*),""(.+)""\r\n(.+)\r\n");
            Match m = r.Match(input);

            string[] mySplit = input.Split(new string[] { "+CMGL:" }, StringSplitOptions.None);
            int num = mySplit.Length - 1;
            for (int i = 1; i <= num; i++)
            {
                string sms = mySplit[i].Replace("\r\nOK\r", "");
                sms = sms.Replace("\r\n", "");
                sms = sms.Replace(",\"", ",");
                sms = sms.Replace("\"", ",");
                sms = sms.Replace("\r\n", ",");
                string[] mess = sms.Split(',');

                if (mess.Length > 4)
                {
                    for (int y = 5; y < mess.Length; y++)
                        mess[4] += ","+mess[y];
                }

                ShortMessage msg = new ShortMessage();
                msg.Index = int.Parse(mess[0]);
                msg.Status = mess[1];
                msg.Sender = mess[3];
                msg.Alphabet = "";
                msg.Sent = DateTime.Now.ToString();
                if (mess[4].IndexOf("\n") > -1) mess[4].Replace("\n", "");
                msg.Message = mess[4];
                messages.Add(msg);
            }

            return messages;
        }
Exemple #8
0
        public ShortMessageCollection ParseMessages(string input)
        {
            ShortMessageCollection messages = new ShortMessageCollection();
            try
            {
                Regex r = new Regex(@"\+CMGL: (\d+),""(.+)"",""(.+)"",(.*),""(.+)""\r\n(.+)\r\n");
                Match m = r.Match(input);
                while (m.Success)
                {
                    ShortMessage msg = new ShortMessage();
                    msg.Index = m.Groups[1].Value;
                    msg.Status = m.Groups[2].Value;
                    msg.Sender = ConvertRusFromUCS2(m.Groups[3].Value);
                    msg.Alphabet = m.Groups[4].Value;
                    DateTime sourceDate = DateTime.ParseExact(m.Groups[5].Value, "dd/M/yy,HH:mm:ss+ff", CultureInfo.InvariantCulture);
                    msg.SentDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, sourceDate.Hour, sourceDate.Minute, sourceDate.Second, sourceDate.Millisecond);

                    msg.Text = ConvertRusFromUCS2(m.Groups[6].Value);

                    messages.Add(msg);
                    m = m.NextMatch();
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Ошибка парсинга сообщений: " + ex.Message);
            }
            return messages;
        }
Exemple #9
0
        public ShortMessageCollection ProcessingNewIncomeSMSMessages(ShortMessageCollection messages, GsmModem modem)
        {
            IncomeSMSSaveMutex.WaitOne();
            ShortMessageCollection notSend = new ShortMessageCollection();
            try
            {
                using (SMSContext context = new SMSContext())
                {

                    ServicePhone ServicePhone = GetServicePhoneById(modem.ServicePhone.ServicePhoneId, context);
                    foreach (ShortMessage message in messages)
                    {
                        bool NotSaved = true;
                        bool isGarbage = true;
                        try
                        {
                            int firstWordLength = message.Text.Contains(" ") ? message.Text.Substring(0, message.Text.IndexOf(" ")).Length : 0;
                            string firstWord = message.Text.Contains(" ") ? message.Text.Substring(0, message.Text.IndexOf(" ")).Replace("\n", "").Replace("\r", "") : null;
                            Client client = GetClientByPhone(message.Sender, context);
                            bool haveFirstWord = !String.IsNullOrEmpty(firstWord);
                            bool ClientSMSAndNotAnswer = false;

                            if (client != null && haveFirstWord)
                            {
                                isGarbage = false;
                                IncomeSMS incomeSMS = GetIncomeSMS(firstWord, client.ClientId, context);
                                if (incomeSMS == null)
                                    ClientSMSAndNotAnswer = true;
                                else
                                {

                                    message.Recipient = incomeSMS.SenderNumber;
                                    message.Sender = ServicePhone.PhoneNumber;
                                    message.Text = message.Text.Substring(firstWordLength + 1);
                                    message.IsRead = true;
                                    if (ClientIsNotBlocked(client))
                                    {
                                        IncomeClientSMS incomeClientSMS = SaveIncomeClientSMS(message, ServicePhone, incomeSMS, client, context);
                                        if (incomeClientSMS != null) NotSaved = false;
                                        int answerId = AddAnswer(incomeSMS.MessageId, incomeClientSMS.IncomeClientSMSId, Answer.AnswerSource.SMS);
                                    }
                                }
                            }
                            if ((client == null || ClientSMSAndNotAnswer) && message.Sender != null && message.Sender.Length > 10)
                            {
                                isGarbage = false;
                                client = haveFirstWord ? GetClientByShortKey(firstWord, ServicePhone, context) : null;
                                string text;
                                if (ServicePhone.Type == ServicePhone.PhoneType.Private)
                                {
                                    client = GetClientByServicePhone(ServicePhone, context);
                                    text = message.Text;
                                }
                                else
                                {
                                    text = message.Text.Substring(firstWord.Length + 1);
                                }

                                IncomeSMS incomeSMS = null;

                                incomeSMS = context.IncomeSMS.FirstOrDefault(x => x.SenderNumber.Equals(message.Sender) && x.RecipientNumber.Equals(ServicePhone.PhoneNumber) && DbFunctions.DiffSeconds(x.DateTime, message.SentDate) <= 30 && x.Status != IncomeSMS.IncomeSMSStatus.Sent);

                                if (incomeSMS != null)
                                {
                                    incomeSMS.Text += message.Text;
                                    context.SaveChanges();
                                    NotSaved = false;
                                    message.IsRead = true;
                                }
                                else if (incomeSMS == null && client != null)
                                {
                                    if (ClientIsNotBlocked(client))
                                    {
                                        incomeSMS = SaveIncomeSMS(client, text, message.Sender, ServicePhone.PhoneNumber, message.SentDate, firstWord, context);
                                        if (incomeSMS != null) NotSaved = false;
                                    }
                                    message.IsRead = true;
                                }

                            }

                            if (NotSaved & !isGarbage)
                            {
                                notSend.Add(message);
                                message.IsRead = true;
                            }
                        }
                        catch
                        {
                            if (NotSaved & !isGarbage)
                            {
                                notSend.Add(message);
                                message.IsRead = true;
                            }
                        }

                    }

                    foreach (ShortMessage message in messages.Where(x => x.IsRead == false))
                    {
                        bool Saved = false;
                        try
                        {
                            Client client = GetClientByPhone(message.Sender, context);
                            if (client != null)
                            {
                                IncomeClientSMS incomeClientSMS = null;

                                incomeClientSMS = context.IncomeClientSMS.FirstOrDefault(x => x.Client.ClientId == client.ClientId && DbFunctions.DiffSeconds(x.DateTime, message.SentDate) <= 15 && x.Status != IncomeClientSMS.IncomeClientSMSStatus.Sent);

                                if (incomeClientSMS != null)
                                {

                                    incomeClientSMS.Text += message.Text;
                                    context.Entry(incomeClientSMS).State = System.Data.Entity.EntityState.Modified;
                                    context.SaveChanges();
                                    Saved = true;
                                }

                            }
                            else
                            {
                                IncomeSMS incomeSMS = null;

                                incomeSMS = context.IncomeSMS.FirstOrDefault(x => x.SenderNumber.Equals(message.Sender) && x.RecipientNumber.Equals(ServicePhone.PhoneNumber) && DbFunctions.DiffSeconds(x.DateTime, message.SentDate) <= 30 && x.Status != IncomeSMS.IncomeSMSStatus.Sent);

                                if (incomeSMS != null)
                                {
                                    incomeSMS.Text += message.Text;
                                    context.Entry(incomeSMS).State = System.Data.Entity.EntityState.Modified;
                                    context.SaveChanges();
                                    Saved = true;
                                }

                            }

                        }
                        catch
                        {
                            if (!Saved) notSend.Add(message);
                        }

                    }

                }
                return notSend;
            }
            catch (Exception e)
            {
                notSend = messages;
                return notSend;
            }
            finally
            {
                IncomeSMSSaveMutex.ReleaseMutex();
            }
        }