Exemplo n.º 1
0
        /// <summary>
        /// This method handles the parsing of the actual SMS that was retrieved from a specific memory bank on the SIM card.
        /// </summary>
        /// <param name="smsDetailsMessageLine"></param>
        /// <param name="allDataLinesReceived"></param>
        /// <param name="allDataLinesIndex"></param>
        private void ParseSmsDetailsMessageLines(string smsDetailsMessageLine, string[] allDataLinesReceived, int allDataLinesIndex)
        {
            /*Sample SMS data read off the bank.
             *
             * +CMGR: "REC UNREAD","+27763777515",,"13/11/01,20:18:59+08"
             * Hello, how are you?
             * Great to hear from you
             *
             * OK
             */
            SmsReceivedInfoWindows smsReceivedInfo = new SmsReceivedInfoWindows();

            string[] smsMessageDetails = smsDetailsMessageLine.Split(','); //i.e. this is the first line e.g. +CMGR: "REC UNREAD","+27763777515",,"13/11/01,20:18:59+08"
            smsReceivedInfo.CellPhoneNumber     = smsMessageDetails[1].Replace("\"", string.Empty);
            smsReceivedInfo.ReceivedDateTimeRaw = string.Format("{0},{1}", smsMessageDetails[3], smsMessageDetails[4]).Replace("\"", string.Empty);
            smsReceivedInfo.ReceivedDate        = GetDateTimeFromSmsDateTime(smsReceivedInfo.ReceivedDateTimeRaw, _ignoreTimeZoneOnSmsDateReceived);
            StringBuilder smsMessage       = new StringBuilder();
            int           messageLineIndex = allDataLinesIndex + 1; //The next line contains the first line of the SMS message.

            while (true)                                            //Go through the next lines containing the SMS message.
            {
                string smsMessageLine = allDataLinesReceived[messageLineIndex].Replace("\n", string.Empty);
                if (smsMessageLine.Contains(CMD_OK))
                {
                    break; //End of SMS message.
                }
                smsMessage.AppendLine(smsMessageLine);
                messageLineIndex++;
            }
            smsReceivedInfo.SmsMessage = smsMessage.ToString();
            if (OnSmsReceived != null)
            {
                OnSmsReceived(this, new SmsReceivedEventArgsWindows(smsReceivedInfo));
            }
            if (_memoryBanksToClearQueue.Count > 0)
            {
                int simMemoryBankToClear = _memoryBanksToClearQueue.First();
                ClearSimMemoryBank(simMemoryBankToClear);
                _memoryBanksToClearQueue.RemoveAt(0);
            }
        }
 public SmsReceivedEventArgsWindows(SmsReceivedInfoWindows smsReceivedInfo)
 {
     _smsReceivedInfo = smsReceivedInfo;
 }