Ejemplo n.º 1
0
        private EncodedMessage Encode(string sourceText)
        {
            StringBuilder sbMain    = new StringBuilder();
            StringBuilder sbMessage = new StringBuilder();

            // номер SMS-сервера
            if (_smsServer == null)
            {
                // определяется настройками телефона
                sbMain.Append("00");
            }
            else
            {
                // задан явно
                string smsServerNo = _smsServer.ToString();
                // длина номера (число HEX-байт + 1)
                sbMain.Append((smsServerNo.Length / 2 + 1).ToString("X2"));
                // тип номера (международный)
                sbMain.Append("91");
                // номер
                sbMain.Append(smsServerNo);
            }

            // собственно сообщение
            // поле данных протокола (тип сообщения - исходящее, задано относительное
            // время валидности сообщения, в днях)
            sbMessage.Append("11");
            // ссылочный номер сообщения (будет возвращен телефоном)
            sbMessage.Append("00");
            // длина номера получателя, число ДЕСЯТИЧНЫХ цифр
            sbMessage.Append(
                _recipient.ToString(PhoneNumberFormat.NonReadable).Length.ToString("X2"));
            // тип номера (международный)
            sbMessage.Append("91");
            // номер получателя
            sbMessage.Append(_recipient.ToString(PhoneNumberFormat.SMS));
            // идентификатор протокола (обычное сообщение)
            sbMessage.Append("00");
            // схема кодирования данных в поле данных (кодировка UCS2)
            sbMessage.Append("08");
            // период валидности сообщения
            sbMessage.Append((166 + _validityPeriod).ToString("X2"));

            // кодируем текст сообщения в UCS2
            string ucs2Text = EncodeUSC2String(sourceText);

            // длина текста
            sbMessage.Append((ucs2Text.Length / 2).ToString("X2"));
            // текст
            sbMessage.Append(ucs2Text);

            // объединяем две строки
            sbMain.Append(sbMessage.ToString());
            EncodedMessage encMessage = new EncodedMessage(sbMessage.ToString().Length / 2,
                                                           sbMain.ToString());

            return(encMessage);
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Отправка сообщения
 /// </summary>
 /// <param name="message">Сообщение, подготовленное к отправке</param>
 public void Send(EncodedMessage message)
 {
     PreparePort();
     // включаем режим отправки SMS в PDU-формате
     CheckCommandStatus(SendATCommand("AT+CMGF=0"));
     // проверяем, поддреживает ли телефон SMS-команды
     CheckCommandStatus(SendATCommand("AT+CSMS=0"));
     // отправляем заголовок сообщения
     CheckCommandStatus(
         SendATCommand(string.Format("AT+CMGS={0}", message.NumberOfOctets)), ">");
     // отправляем тело сообщения
     CheckCommandStatus(SendATCommand(message.Message, 0x1A));
 }
Ejemplo n.º 3
0
        /// <summary>
        /// Формирование короткого текстового сообщения для отправки
        /// </summary>
        /// <returns>Короткое текстовое сообщение в PDU-формате</returns>
        /// <remarks>Поскольку максимальная длина текста в одном сообщении ограничена,
        /// то исходный текст сообщения в результате может быть разбит на несколько
        /// сообщений в PDU-формате</remarks>
        public EncodedMessage[] Encode()
        {
            if (_recipient == null)
            {
                throw new InvalidOperationException("Не задан номер получателя сообщений");
            }
            if (string.IsNullOrEmpty(_messageText))
            {
                throw new InvalidOperationException("Не задан текст сообщения");
            }

            // разбиваем текст на сообщения с учетом макс. длины
            List <string> rawMessages = ParseMessageText();

            // здесь будут сохранены закодированные сообщения
            EncodedMessage[] messages = new EncodedMessage[rawMessages.Count];
            for (int i = 0; i < rawMessages.Count; i++)
            {
                // кодируем очередное сообщение
                messages[i] = Encode(rawMessages[i]);
            }
            return(messages);
        }
Ejemplo n.º 4
0
 /// <summary>
 /// Отправка нескольких сообщений
 /// </summary>
 /// <param name="messages">Сообщения, подготовленные к отправке</param>
 /// <param name="reverseOrder">Отправить сообщения в обратном порядке</param>
 public void Send(EncodedMessage[] messages, Boolean reverseOrder)
 {
     if (reverseOrder)
     {
         for (Int32 i = messages.Length; i > 0; i--)
             Send(messages[i - 1]);
     }
     else
     {
         foreach (EncodedMessage message in messages)
             Send(message);
     }
 }
Ejemplo n.º 5
0
 /// <summary>
 /// Отправка нескольких сообщений
 /// </summary>
 /// <param name="messages">Сообщения, подготовленные к отправке</param>
 public void Send(EncodedMessage[] messages)
 {
     Send(messages, true);
 }
Ejemplo n.º 6
0
 /// <summary>
 /// Отправка сообщения
 /// </summary>
 /// <param name="message">Сообщение, подготовленное к отправке</param>
 public void Send(EncodedMessage message)
 {
     PreparePort();
     // включаем режим отправки SMS в PDU-формате
     CheckCommandStatus(SendATCommand("AT+CMGF=0"));
     // проверяем, поддреживает ли телефон SMS-команды
     CheckCommandStatus(SendATCommand("AT+CSMS=0"));
     // отправляем заголовок сообщения
     CheckCommandStatus(
         SendATCommand(String.Format("AT+CMGS={0}", message.NumberOfOctets)), ">");
     // отправляем тело сообщения
     CheckCommandStatus(SendATCommand(message.Message, 0x1A));
 }
Ejemplo n.º 7
0
        private EncodedMessage Encode(String sourceText)
        {
            StringBuilder sbMain = new StringBuilder();
            StringBuilder sbMessage = new StringBuilder();
            
            // номер SMS-сервера
            if (_smsServer == null)
                // определяется настройками телефона
                sbMain.Append("00");
            else
            {
                // задан явно
                String smsServerNo = _smsServer.ToString();
                // длина номера (число HEX-байт + 1)
                sbMain.Append((smsServerNo.Length / 2 + 1).ToString("X2"));
                // тип номера (международный)
                sbMain.Append("91");
                // номер 
                sbMain.Append(smsServerNo);
            }

            // собственно сообщение
            // поле данных протокола (тип сообщения - исходящее, задано относительное
            // время валидности сообщения, в днях)
            sbMessage.Append("11");
            // ссылочный номер сообщения (будет возвращен телефоном)
            sbMessage.Append("00");
            // длина номера получателя, число ДЕСЯТИЧНЫХ цифр
            sbMessage.Append(
                _recipient.ToString(PhoneNumberFormat.NonReadable).Length.ToString("X2"));
            // тип номера (международный)
            sbMessage.Append("91");
            // номер получателя
            sbMessage.Append(_recipient.ToString(PhoneNumberFormat.SMS));
            // идентификатор протокола (обычное сообщение)
            sbMessage.Append("00");
            // схема кодирования данных в поле данных (кодировка UCS2)
            sbMessage.Append("08");
            // период валидности сообщения
            sbMessage.Append((166 + _validityPeriod).ToString("X2"));

            // кодируем текст сообщения в UCS2
            String ucs2Text = EncodeUSC2String(sourceText);

            // длина текста
            sbMessage.Append((ucs2Text.Length / 2).ToString("X2"));
            // текст 
            sbMessage.Append(ucs2Text);

            // объединяем две строки
            sbMain.Append(sbMessage.ToString());
            EncodedMessage encMessage = new EncodedMessage(sbMessage.ToString().Length / 2, 
                sbMain.ToString());
            
            return encMessage;
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Формирование короткого текстового сообщения для отправки
        /// </summary>
        /// <returns>Короткое текстовое сообщение в PDU-формате</returns>
        /// <remarks>Поскольку максимальная длина текста в одном сообщении ограничена,
        /// то исходный текст сообщения в результате может быть разбит на несколько 
        /// сообщений в PDU-формате</remarks>
        public EncodedMessage[] Encode()
        {
            if (_recipient == null)
                throw new InvalidOperationException("Не задан номер получателя сообщений");
            if (String.IsNullOrEmpty(_messageText))
                throw new InvalidOperationException("Не задан текст сообщения");

            // разбиваем текст на сообщения с учетом макс. длины
            List<String> rawMessages = ParseMessageText();
            
            // здесь будут сохранены закодированные сообщения
            EncodedMessage[] messages = new EncodedMessage[rawMessages.Count];
            for (Int32 i = 0; i < rawMessages.Count; i++)
            {
                // кодируем очередное сообщение
                messages[i] = Encode(rawMessages[i]);
            }
            return messages;
        }