Beispiel #1
0
        private static void Gsm_SmsSentEvent(object sender, ParseSms e)
        {
            if ((Gsm.Debug & (int)Gsm.DebugCategory.GsmRequest) > 0)
            {
                Console.ForegroundColor = ConsoleColor.DarkCyan;
                Console.WriteLine("Versendet " + e.Sender + ":\r\n" + e.Message);
                Console.ForegroundColor = ConsoleColor.Gray;
            }

            string msg       = e.Message.ToLower().StartsWith(SmsWayValidationTrigger.ToLower()) ? SmsWayValidationTrigger : e.Message; //Bei "SmsAbruf" ist SendeText und Empfangstect verschieden.
            int    contentId = MelBoxSql.Tab_Message.SelectOrCreateMessageId(msg);
            int    toId      = GetSmsSenderID(e.Sender, e.Message);

            //'SMS gesendet' in Datenbank schreiben
            MelBoxSql.Sent sent = new MelBoxSql.Sent(toId, contentId, MelBoxSql.Tab_Contact.Communication.Sms)
            {
                Reference    = e.InternalReference,
                Confirmation = Tab_Sent.Confirmation.AwaitingRefernece,
                SentTime     = e.TimeUtc
            };

            if (sent.SentTime == DateTime.MinValue)
            {
                sent.SentTime = DateTime.UtcNow;
            }

            MelBoxSql.Tab_Sent.Insert(sent);
        }
Beispiel #2
0
        private static void Gsm_SmsSentFaildEvent(object sender, ParseSms e)
        {
            string Text = $"Für die SMS  >{e.InternalReference}<\r\n" +
                          $"An >{e.Sender}<\r\n" +
                          $"Text >{e.Message}<\r\n" +
                          $"ist seit >{e.TimeUtc.ToLocalTime()}< keine Empfangsbestätigung eingegangen. \r\n" +
                          $"Senden abgebrochen. Kein erneuter Sendeversuch an Empfänger.";

            MelBoxSql.Tab_Log.Insert(Tab_Log.Topic.Gsm, 1, Text.Replace("\r\n", " "));
            Email.Send(Email.Admin, Text, "Senden fehlgeschlagen: " + e.Message);
        }
Beispiel #3
0
        private static void Gsm_SmsRecievedEvent(object sender, ParseSms e)
        {
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine(e.Sender + ":\r\n" + e.Message);
            Console.ForegroundColor = ConsoleColor.Gray;

            #region SMS-Empfang in Datenbank protokollieren
            int fromId    = GetSmsSenderID(e.Sender, e.Message);
            int messageId = MelBoxSql.Tab_Message.SelectOrCreateMessageId(e.Message);

            Recieved recieved1 = new Recieved()
            {
                FromId    = fromId,
                ContentId = messageId,
                RecTime   = DateTime.UtcNow
            };

            MelBoxSql.Tab_Recieved.Insert(recieved1);
            #endregion

            #region Weiterleiten per EMail oder SMS

            MailAddressCollection emailRecievers = new MailAddressCollection();
            string emailSuffix = string.Empty;

            Random ran     = new Random();
            int    emailId = ran.Next(256, 9999);                                // Pseudo-Id für Sendungsverfolgung

            if (e.Message.ToLower().Trim() == SmsWayValidationTrigger.ToLower()) // SmsAbruf?
            {
                #region Meldelinientest 'SmsAbruf'

                MelBoxGsm.Gsm.Ask_SmsSend(e.Sender, e.Message.Trim() + " um " + DateTime.Now.ToString("HH:mm:ss") + " Uhr.");

                Sent sent = new Sent(fromId, messageId, Tab_Contact.Communication.Sms)
                {
                    SentTime = DateTime.UtcNow
                };
                MelBoxSql.Tab_Sent.Insert(sent);

                #endregion
            }
            else if (Tab_Message.IsMessageBlockedNow(messageId)) // Nachricht zum jetzigen Zeitpunkt gesperrt?
            {
                emailSuffix += Environment.NewLine + "Keine Weiterleitung an Bereitschaftshandy da SMS zur Zeit gesperrt.";
            }
            else // An Bereitschaft senden
            {
                #region An Bereitschaft senden
                //Bereitschaft ermitteln
                List <MelBoxSql.Shift> currentShifts = MelBoxSql.Tab_Shift.SelectOrCreateCurrentShift();
                Console.WriteLine("Aktuelle Bereitschaft: ");

                //an Bereitschaft weiterleiten
                foreach (var shift in currentShifts)
                {
                    Contact to = MelBoxSql.Tab_Contact.SelectContact(shift.ContactId);
                    Console.WriteLine($"Id [{shift.Id}] >{to.Name}< von >{shift.Start}< bis >{shift.End}<");

                    //Email freigegeben und gültig?
                    if ((to.Via & Tab_Contact.Communication.Email) > 0 && Tab_Contact.IsEmail(to.Email))
                    {
                        emailRecievers.Add(new MailAddress(to.Email, to.Name));

                        Sent sent = new Sent(shift.ContactId, messageId, Tab_Contact.Communication.Email)
                        {
                            Confirmation = Tab_Sent.Confirmation.AwaitingRefernece,
                            Reference    = emailId,
                            SentTime     = DateTime.UtcNow
                        };

                        MelBoxSql.Tab_Sent.Insert(sent);
                    }

                    //SMS?
                    if ((to.Via & Tab_Contact.Communication.Sms) > 0)
                    {
                        Sent sent = new Sent(shift.ContactId, messageId, Tab_Contact.Communication.Sms)
                        {
                            Confirmation = Tab_Sent.Confirmation.NaN,
                            SentTime     = DateTime.UtcNow
                        };

                        MelBoxSql.Tab_Sent.Insert(sent);
                        MelBoxGsm.Gsm.Ask_SmsSend("+" + to.Phone.ToString(), e.Message);
                    }
                }

                if (currentShifts.Count == 0)
                {
                    Console.WriteLine("z.Zt. keine aktive Bereitschaft");
                    emailSuffix += Environment.NewLine + "Keine Weiterleitung an Bereitschaftshandy während der Geschäftszeit.";
                }
                else
                {
                    emailSuffix += Environment.NewLine + "Weiterleitung an Bereitschaftshandy außerhalb Geschäftszeiten ist erfolgt.";
                }
                #endregion
            }

            //Emails an Bereitschaft und ständige Empfänger senden.
            string subject = $"SMS-Eingang >{MelBoxSql.Tab_Contact.SelectName_Company_City(fromId)}<, Text >{e.Message}<";
            string body    = $"Absender >{e.Sender}<\r\nText >{e.Message}<\r\nSendezeit >{e.TimeUtc.ToLocalTime().ToLongTimeString()}<\r\n" + emailSuffix;
            Email.Send(emailRecievers, body, subject, emailId);

            #endregion
        }
Beispiel #4
0
        private static bool ParseConsoleInput(string request)
        {
            bool run = true;

            string[] words = request.Split(' ', StringSplitOptions.RemoveEmptyEntries);
            if (words.Length < 1)
            {
                return(run);
            }

            switch (words[0].ToLower())
            {
            case "exit":
                run = false;
                break;

            case "email":
                if (words[1].ToLower() == "test")
                {
                    Email.Send(Email.Admin, "Test-Email von MelBox2");
                }
                break;

            case "sms":
                if (words[1].ToLower() == "sim")
                {
                    Console.WriteLine("Simuliere SMS-Empfang...");
                    ParseSms sms = new ParseSms
                    {
                        Message = "Dies ist eine MelBox2-Testnachricht. Bitte ignorieren.",
                        TimeUtc = DateTime.Now,
                        Sender  = Environment.MachineName
                    };

                    Gsm_SmsRecievedEvent(null, sms);
                }
                else
                {
                    string msg = string.Empty;

                    for (int i = 2; i < words.Length; i++)
                    {
                        msg += words[i];
                    }

                    Gsm.Ask_SmsSend(words[1], msg);
                }
                break;

            case "debug":
                if (words.Length > 1)
                {
                    if (int.TryParse(words[1], out int debug))
                    {
                        Gsm.Debug = debug;
                        Console.WriteLine("Debug = " + Gsm.Debug);
                    }
                }
                break;

            case "decode":
                if (words.Length > 1)
                {
                    string ucs2 = words[1].Trim();
                    Console.WriteLine(Gsm.DecodeUcs2(ucs2));
                }
                break;

            case "help":
                ShowHelp();
                break;

            default:
                if (request.Length > 1)
                {
                    Gsm.Write(request);
                }
                break;
            }

            return(run);
        }