/// <summary> /// Загружает список входящих сообщений /// </summary> private void LoadSmsInbox() { var messages = comm.ReadRawMessages(PhoneMessageStatus.All, PhoneStorageType.Sim); inbox = messages; // тут начинается пиздец longMsg = new List <SmsPdu>(); prevMsg = null; foreach (ShortMessageFromPhone message in messages) { i = message.Index; SmsDeliverPdu SMSPDU = new SmsDeliverPdu(message.Data, true, -1); bool isMultiPart = SmartMessageDecoder.IsPartOfConcatMessage(SMSPDU); // если у сообщения есть датахедер, то скорее всего оно длинное if (SMSPDU.UserDataHeaderPresent && isMultiPart) { var longMessage = DecodeLongMessage(SMSPDU); if (longMessage != null) { // Показываем DisplayMessage(longMessage); } } else { DisplayMessage(SMSPDU); } } }
private void Receiver_MessageReceived(object sender, MessageReceivedEventArgs e) { var comm = sender as SmsModemBlock; var messagelist = comm.ReadRawMessages(PhoneMessageStatus.All, PhoneStorageType.Sim); var messageString = string.Empty; StringBuilder sb = new StringBuilder(); if (messagelist.Length > 0) { // на случай, если длинное сообщение IList <SmsPdu> longMsg = new List <SmsPdu>(); foreach (ShortMessageFromPhone message in messagelist) { //сырая хуета var pdu = new SmsDeliverPdu(message.Data, true, -1); var origin = pdu.OriginatingAddress; var txt = pdu.UserDataText; bool isMultiPart = SmartMessageDecoder.IsPartOfConcatMessage(pdu); // если у сообщения есть датахедер, то скорее всего оно длинное if (pdu.UserDataHeaderPresent && isMultiPart) { if (longMsg.Count == 0 || SmartMessageDecoder.ArePartOfSameMessage(longMsg.Last(), pdu)) { longMsg.Add(pdu); } if (SmartMessageDecoder.AreAllConcatPartsPresent(longMsg)) // is Complete { txt = SmartMessageDecoder.CombineConcatMessageText(longMsg); } else { continue; } } sb.AppendFormat("{0}: {1}", origin, txt); } var sms = sb.ToString(); _hub.Invoke("SmsReceived", sms, comm.CurrentCommandID).Wait(); comm.SetWaiting(false); //Subscriptions.Remove(comm); } }
private void comm_MessageReceived(object sender, MessageReceivedEventArgs e) { var messages = comm.ReadRawMessages(PhoneMessageStatus.ReceivedUnread, PhoneStorageType.Sim); foreach (ShortMessageFromPhone message in messages) { SmsDeliverPdu data = new SmsDeliverPdu(message.Data, true, -1); bool isMultiPart = SmartMessageDecoder.IsPartOfConcatMessage(data); if (isMultiPart) { var longMessage = DecodeLongMessage(data); if (longMessage != null) { DisplayMessage(longMessage); } } else { DisplayMessage(data); } } }
void ReceiveMessages() { Log.Add(LogLevel.Verbose, "SMS", "Reading SMS messages from device..."); Stopwatch sw = new Stopwatch(); sw.Start(); DecodedShortMessage[] msgs = _gsm.ReadMessages(PhoneMessageStatus.All, "MT"); Log.Add(LogLevel.Verbose, "SMS", String.Format("{0} messages in storage", msgs.Length)); foreach (DecodedShortMessage msg in msgs) { string from = string.Empty; string text = string.Empty; DateTime received = DateTime.Now; bool _fullMessageReceived = false; SmsDeliverPdu pdu = (SmsDeliverPdu)msg.Data; if (SmartMessageDecoder.IsPartOfConcatMessage(pdu)) { IConcatenationInfo info = SmartMessageDecoder.GetConcatenationInfo(pdu); Log.Add(LogLevel.Debug, "SMS", string.Format("Received multi-part message {0}: {1}/{2}", info.ReferenceNumber, info.CurrentNumber, info.TotalMessages)); if (_concatPdus.ContainsKey(info.ReferenceNumber)) { _concatPdus[info.ReferenceNumber].Add(pdu); } else { _concatPdus.Add(info.ReferenceNumber, new List <SmsPdu>() { pdu }); } if (SmartMessageDecoder.AreAllConcatPartsPresent(_concatPdus[info.ReferenceNumber])) { _fullMessageReceived = true; from = pdu.OriginatingAddress; received = pdu.SCTimestamp.ToDateTime(); text = SmartMessageDecoder.CombineConcatMessageText(_concatPdus[info.ReferenceNumber]); } } else { Log.Add(LogLevel.Debug, "SMS", "Received single-part SMS."); _fullMessageReceived = true; from = String.Format("{0}", pdu.OriginatingAddress); received = pdu.SCTimestamp.ToDateTime(); text = pdu.UserDataText; } if (_fullMessageReceived) { Log.Add(LogLevel.Info, "SMS", String.Format("Incoming SMS from {0}", from)); if (NormalizeNumbers) { from = NormalizeNumber(from); } if (_resolveNumbers) { from = ResolveNameByNumber(from); } Log.Add(LogLevel.Debug, "SMS", String.Format("Message from {0} at {1}: {2}", from, received, text)); if (OnMessageReceived != null) { OnMessageReceived(this, new Message(from, received, text)); } } _gsm.DeleteMessage(msg.Index, msg.Storage); } sw.Stop(); Log.Add(LogLevel.Verbose, "SMS", String.Format("Reading took {0}ms", sw.Elapsed.TotalMilliseconds)); }