예제 #1
0
        private static void ParseNewSms(string[] header, string[] line)
        {
            //Dies ist vorher festgestellt als eine SMS-Nachricht
            try
            {
#if DEBUG
                foreach (var item in header)
                {
                    Console.WriteLine($">{item}<");
                }
                Console.WriteLine("Header.length = " + header.Length);
#endif

                if (header.Length < 5)
                {
                    return;                    //Ungültiger Header!
                }
                //<index> Index
                int.TryParse(header[(int)HeaderSms.Index], out int index);

                //<stat> Status
                string status = header[(int)HeaderSms.MessageStatus].Trim('"');

                //<oa>/<da> OriginatingAddress/ DestinationAddress | <fo> First Oxctet
                string sender = header[(int)HeaderSms.Sender].Trim('"');

                //[<alpha>] PhoneBookentry für <oa>/<da>
                string SenderPhoneBookEntry = header[3].Trim('"');

                //[<scts>] Service Centre Time Stamp | [<ra>] Recipient Address
                DateTime TimeUtc = ParseUtcTime(header[4].Trim('"'), header[5].Trim('"'));

                string messageText = string.Empty;

                for (int i = 1; i < line.Length; i++)
                {
                    if (line[i] == "OK")
                    {
                        break;                  //und OK-Ausgabe am Ende nicht speichern
                    }
                    if (line[i].Length == 0)
                    {
                        continue;                      // keine Leerzeilen
                    }
                    messageText += line[i] + " ";
                }

                messageText = messageText.Trim();

                if (messageText.StartsWith("00") && messageText.Length > 20) //Kein Leerzeichen, startet mit '00' und lang: Vermutung Sms-Inhalt ist in UCS2 Formatiert wegen Sonderzeichen z.B. °C, ä, ß...
                {
                    messageText = DecodeUcs2(messageText);
                }
                //else
                //{
                //    messageText = DecodeGsm(messageText); // schmeißt Exception
                //}

                ParseSms sms = new ParseSms
                {
                    RawHeader            = line[0],
                    Index                = index,
                    MessageStatus        = status,
                    Sender               = sender,
                    SenderPhonebookEntry = SenderPhoneBookEntry,
                    TimeUtc              = TimeUtc,
                    Message              = UmlauteDecode(messageText) // Sinnvoll?
                };


                // if (header.Length > 5) // Letzte werden beim MC75 nicht ausgegeben
                // {
                //     int.TryParse(header[6], out int numberTypeInt);

                //     int.TryParse(header[7], out int textLength);

                //
                //     sms.MessageLength = textLength;
                //     sms.PhoneNumberType = numberTypeInt;
                //}

                SmsRecievedEvent?.Invoke(null, sms);
            }
            catch (Exception ex)
            {
                throw new Exception($"FEHLER ParseNewSms(): {ex.GetType()}\r\n{ex.Message}\r\n{ex.StackTrace}");
            }
        }
 /// <summary>
 /// Trigger für das Event SMS empfangen
 /// </summary>
 /// <param name="e"></param>
 static void RaiseSmsRecievedEvent(Sms e)
 {
     SmsRecievedEvent?.Invoke(null, e);
 }