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); }
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); }
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 }
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); }