/// <summary> /// Отображает сообщение /// </summary> /// <param name="pdu">Сообщение</param> /// <param name="mode">Режим отображения</param> private void DisplayMessage(object pdu) { if (this.InvokeRequired) { this.BeginInvoke(new ShowMessageDelegate(DisplayMessage), new object[] { pdu }); return; } //задаем переменные int index = 0; string phoneNumber = string.Empty; string msg = string.Empty; string timestamp = string.Empty; //парсим обьект if (pdu is SmsDeliverPdu) { SmsDeliverPdu data = (SmsDeliverPdu)pdu; phoneNumber = data.OriginatingAddress; msg = data.UserDataText; timestamp = data.SCTimestamp.ToString(); index = i; } else if (pdu is RecievedSMS) { RecievedSMS LongSMS = (RecievedSMS)pdu; phoneNumber = LongSMS.Sender; msg = LongSMS.Message; timestamp = LongSMS.Date.ToString(); index = LongSMS.Index; } else { return; } // отображаем смс switch (DisplayMode) { case MessageDisplayMode.Popup: MessageBox.Show(string.Format("Получено новое сообщение от {0}: \r\n {1} \r\n {2}", phoneNumber, timestamp, msg)); break; case MessageDisplayMode.Datagrid: //read message in datagrid SMSList.Rows.Add(index, phoneNumber, timestamp, msg); break; case MessageDisplayMode.Array: break; default: break; } }
/// <summary> /// Обрабатывает длинные сообщения /// </summary> /// <param name="SMSPDU">Само сообщение</param> /// <param name="longMsg">Коллекция объектов <see cref="SmsPdu"/>, являющихся частями длинного сообщения</param> /// <param name="prevMsg">Предыдущее сообщение</param> public RecievedSMS DecodeLongMessage(SmsDeliverPdu SMSPDU) { if (longMsg.Count == 0 || SmartMessageDecoder.ArePartOfSameMessage(longMsg.Last(), SMSPDU)) { longMsg.Add(SMSPDU); } else if (prevMsg != null && SmartMessageDecoder.ArePartOfSameMessage(SMSPDU, prevMsg)) { longMsg.Clear(); longMsg.Add(SMSPDU); } prevMsg = SMSPDU; if (SmartMessageDecoder.AreAllConcatPartsPresent(longMsg)) // is Complete { var txt = SmartMessageDecoder.CombineConcatMessageText(longMsg); // создаем сообщение RecievedSMS longMessage = new RecievedSMS(i, "REC_READ", SMSPDU.OriginatingAddress, SMSPDU.SCTimestamp, txt); // очищаем за собой longMsg.Clear(); return(longMessage); } return(null); }