public IHttpContext ResponseIn(IHttpContext context)
        {
            string payload = context.Request.Payload;
            Dictionary <string, string> args = MelBoxWeb.ReadPayload(payload);

            ReadGlobalFields(args);

            Dictionary <string, string> action = new Dictionary <string, string>();

            if (isAdmin)
            {
                action.Add("/blocked/create", "Ausgewählte Nachricht sperren");
            }

            DataTable     dt      = Program.Sql.GetViewMsgRec();
            StringBuilder builder = new StringBuilder();

            builder.Append(MelBoxWeb.HtmlTablePlain(dt, isAdmin));
            builder.Append(MelBoxWeb.HtmlEditor(action));
#if DEBUG
            builder.Append("<p class='w3-pink'>" + payload + "</p>");
#endif
            context.Response.SendResponse(MelBoxWeb.HtmlCanvas(builder.ToString(), dt.TableName, logedInUserName));
            return(context);
        }
        public IHttpContext ResponseShift(IHttpContext context)
        {
            string payload = context.Request.Payload;
            Dictionary <string, string> args = MelBoxWeb.ReadPayload(payload);

            ReadGlobalFields(args);

            #region Tabelle anzeigen
            Dictionary <string, string> action = new Dictionary <string, string>
            {
                { "/shift/edit", "Bereitschaft bearbeiten" }
            };

            if (isAdmin)
            {
                action.Add("/shift/delete", "Bereitschaft löschen");
            }

            DataTable     dt      = Program.Sql.GetViewShift();
            StringBuilder builder = new StringBuilder();

            builder.Append(MelBoxWeb.HtmlTableShift(dt, 0, logedInUserId, isAdmin));
            builder.Append(MelBoxWeb.HtmlEditor(action));
            #endregion
#if DEBUG
            builder.Append("<p class='w3-pink'>" + payload + "</p>");
#endif
            context.Response.SendResponse(MelBoxWeb.HtmlCanvas(builder.ToString(), dt.TableName, logedInUserName));
            return(context);
        }
        public IHttpContext ResponseOverdue(IHttpContext context)
        {
            string payload = context.Request.Payload;
            Dictionary <string, string> args = MelBoxWeb.ReadPayload(payload);

            ReadGlobalFields(args);

            DataTable     dt      = Program.Sql.GetViewMsgOverdue();
            StringBuilder builder = new StringBuilder();

            if (dt.Rows.Count == 0)
            {
                builder.Append(MelBoxWeb.HtmlAlert(3, "Keine Zeitüberschreitungen festgestellt", "Zur Zeit ist kein überwachter Sender in Verzug."));

                dt = Program.Sql.GetMonitoredContactList();
                builder.Append(MelBoxWeb.HtmlTablePlain(dt, false));
            }
            else
            {
                builder.Append(MelBoxWeb.HtmlTablePlain(dt, false));
            }

            const string info = "Den einzelnen Benutzern kann ein Wert 'Max_Inaktiv' [in Stunden] zugewiesen werden. " +
                                "Kommt von diesen Benutzern innherhalb der eingestellten Zeit keine Meldung, sollte der Meldeweg (SMS, Email) geprüft werden.";

            builder.Append(MelBoxWeb.HtmlInfoSidebar("Überwachte Meldungen", info));
#if DEBUG
            builder.Append("<p class='w3-pink'>" + payload + "</p>");
#endif
            context.Response.SendResponse(MelBoxWeb.HtmlCanvas(builder.ToString(), dt.TableName, logedInUserName));
            return(context);
        }
        public IHttpContext ResponseOut(IHttpContext context)
        {
            string payload = context.Request.Payload;
            Dictionary <string, string> args = MelBoxWeb.ReadPayload(payload);

            ReadGlobalFields(args);

            DataTable     dt      = Program.Sql.GetViewMsgSent();
            StringBuilder builder = new StringBuilder();

            builder.Append(MelBoxWeb.HtmlTablePlain(dt, false));

            string info = "<i class='w3-xxlarge w3-disabled material-icons-outlined'>storage</i> Nur Datenbank<br>" +
                          "<i class='w3-xxlarge w3-disabled material-icons-outlined'>not_started</i> bereit zum Versenden<br>" +
                          "<i class='w3-xxlarge w3-disabled material-icons-outlined'>radar</i> Warte auf Empfangsbestätigung<br>" +
                          "<i class='w3-xxlarge w3-disabled material-icons-outlined'>replay</i> wird nochmal gesendet<br>" +
                          "<i class='w3-xxlarge w3-disabled material-icons-outlined'>unpublished</i> Nachverfolgung abgebrochen<br>" +
                          "<i class='w3-xxlarge w3-disabled material-icons-outlined'>check_circle</i> Empfangsbestätigung erhalten<br>";

            builder.Append(MelBoxWeb.HtmlInfoSidebar("Sendestatus", info));
#if DEBUG
            builder.Append("<p class='w3-pink'>" + payload + "</p>");
#endif
            context.Response.SendResponse(MelBoxWeb.HtmlCanvas(builder.ToString(), dt.TableName, logedInUserName));
            return(context);
        }
        public static string ProcessFormCompany(Dictionary <string, string> args, bool createNewCompany)
        {
            StringBuilder builder = new StringBuilder();

            int    companyId = 0;
            string name      = "-KEIN NAME-";
            string address   = string.Empty;
            string city      = string.Empty;

            foreach (string arg in args.Keys)
            {
                switch (arg)
                {
                case "CompanyId":
                    companyId = int.Parse(args[arg]);
                    break;

                case "Name":
                    name = args[arg];    //.Replace('+', ' ');
                    break;

                case "Adresse":
                    address = args[arg];    //.Replace('+', ' ');
                    break;

                case "Ort":
                    city = args[arg];    //.Replace('+', ' ');
                    break;
                }
            }

            if (createNewCompany || companyId == 0)
            {
                bool success = Program.Sql.InsertCompany(name, address, city);
                if (!success)
                {
                    builder.Append(MelBoxWeb.HtmlAlert(1, "Fehler beim Schreiben in die Datenbank", "Der Firmeneintrag für '" + name + "' konnte nicht erstellt werden."));
                }
                else
                {
                    builder.Append(MelBoxWeb.HtmlAlert(3, "Firma '" + name + "' erstellt", "Die Firma '" + name + "' wurde in der Datenbank neu erstellt."));
                }
            }
            else
            {
                if (!Program.Sql.UpdateCompany(companyId, name, address, city))
                {
                    builder.Append(MelBoxWeb.HtmlAlert(2, "Keine Änderungen für Firma '" + name + "'", "Die Änderungen konnten nicht in die Datenbank übertragen werden."));
                }
                else
                {
                    builder.Append(MelBoxWeb.HtmlAlert(3, "Änderungen für Firma '" + name + "' übernommen", "Die Änderungen an Firma '" + name + "' wurden in der Datenbank gespeichert."));
                }
            }

            return(builder.ToString());
        }
        public static void StartWebServer(int port = 48040)
        {
            new Thread(() =>
            {
                Thread.CurrentThread.IsBackground = true;
                Thread.CurrentThread.Priority     = ThreadPriority.BelowNormal;

                var _ = new MelBoxWeb(port);
            }).Start();
        }
        public IHttpContext ResponseAccount(IHttpContext context)
        {
            string caption = "Benutzerkonto";
            string payload = context.Request.Payload;

            Dictionary <string, string> args = MelBoxWeb.ReadPayload(payload);

            ReadGlobalFields(args);

            Dictionary <string, string> action = new Dictionary <string, string>
            {
                { "/account/update", "Änderungen an Kontakt speichern" }
            };

            if (isAdmin)
            {
                action.Add("/account/create", "Neuen Kontakt mit diesen Angaben einrichten");
                action.Add("/account/delete", "Diesen Kontakt löschen");
            }

            StringBuilder builder = new StringBuilder();

            int chosenContactId = logedInUserId;

            if (requestingPage == caption && args.ContainsKey("selectedContactId")) //Ist Antwort von dieser Seite
            {
                int.TryParse(args["selectedContactId"].ToString(), out chosenContactId);
            }
            else if (chosenContactId == 0)
            {
                builder.Append(MelBoxWeb.HtmlAlert(2, "Ungültiger Aufruf", "Für Einsicht in das Benutzerkonto bitte einloggen."));
            }

            if (logedInUserId != 0)
            {
                DataTable dt;
                if (isAdmin)
                {
                    dt = Program.Sql.GetViewContactInfo();
                }
                else
                {
                    dt = Program.Sql.GetViewContactInfo(chosenContactId);
                }

                DataTable dtCompany = Program.Sql.GetCompany();

                builder.Append(MelBoxWeb.HtmlFormAccount(dt, dtCompany, chosenContactId, isAdmin));
            }
#if DEBUG
            builder.Append("<p class='w3-pink w3-mobile'>" + payload + "</p>");
#endif
            context.Response.SendResponse(MelBoxWeb.HtmlCanvas(builder.ToString(), caption, logedInUserName));
            return(context);
        }
        public IHttpContext ResponseBlockedDelete(IHttpContext context)
        {
            string payload = context.Request.Payload;
            Dictionary <string, string> args = MelBoxWeb.ReadPayload(payload);

            ReadGlobalFields(args);

            #region Inhalt ermitteln
            int contentId = 0;
            if (args.ContainsKey("selectedRow"))
            {
                int.TryParse(args["selectedRow"].ToString(), out contentId);
            }
            #endregion

            StringBuilder builder = new StringBuilder();

            if (contentId == 0)
            {
                builder.Append(MelBoxWeb.HtmlAlert(1, "Fehler", "Die übergebene Nachricht konnte nicht zugeordnet werden."));
            }
            else
            {
                if (!Program.Sql.DeleteMessageBlocked(contentId))
                {
                    builder.Append(MelBoxWeb.HtmlAlert(1, "Fehler Nachricht entsperren", "Die Nachricht mit der Nr. " + contentId + " konnte nicht aus der Sperrliste freigegeben werden."));
                }
                else
                {
                    builder.Append(MelBoxWeb.HtmlAlert(3, "Nachricht aus der Sperrliste genommen", "Die gesperrte Nachricht mit der Nr. " + contentId + " wurde durch '" + logedInUserName + "' wieder freigegeben."));
                }
            }

            Dictionary <string, string> action = new Dictionary <string, string>();

            if (isAdmin)
            {
                action.Add("/blocked/update", "Gesperrte Nachricht bearbeiten");
                action.Add("/blocked/delete", "Aus Sperrliste entfernen");
            }

            DataTable dt = Program.Sql.GetViewMsgBlocked();
            builder.Append(MelBoxWeb.HtmlTableBlocked(dt, 0, isAdmin));
            builder.Append(MelBoxWeb.HtmlEditor(action));
#if DEBUG
            builder.Append("<p class='w3-pink'>" + payload + "</p>");
#endif
            context.Response.SendResponse(MelBoxWeb.HtmlCanvas(builder.ToString(), dt.TableName, logedInUserName));
            return(context);
        }
        public IHttpContext Login(IHttpContext context)
        {
            string caption = "Login";      //Überschrift der Seite
            string newGuid = string.Empty; //Nur füllen, wenn neue Benutzeranmeldung
            string payload = context.Request.Payload;
            Dictionary <string, string> args = MelBoxWeb.ReadPayload(payload);

            ReadGlobalFields(args);

            StringBuilder builder = new StringBuilder();

            if (args.ContainsKey("name") && args.ContainsKey("password"))
            {
                string name     = args["name"]; //.Replace('+', ' ');
                string password = args["password"];

                newGuid = MelBoxWeb.CheckLogin(name, password);

                if (newGuid.Length == 0)
                {
                    builder.Append(MelBoxWeb.HtmlAlert(2, "Login fehlgeschlagen", "Login für Benutzer '" + name + "' fehlgeschlagen.<br>Benutzer und Passwort korrekt?"));
                }
                else
                {
                    User newLogedInUser = MelBoxWeb.GetUserFromGuid(newGuid);
                    guid            = newGuid;
                    logedInUserName = newLogedInUser.Name;
                    logedInUserId   = newLogedInUser.Id;
                    isAdmin         = newLogedInUser.IsAdmin;
                }
            }

            if (guid.Length == 0 || logedInUserId == 0)
            {
                builder.Append(MelBoxWeb.HtmlLogin());
            }
            else
            {
                builder.Append(MelBoxWeb.HtmlAlert(4, isAdmin ? "Angemeldet als Administrator" : "Angemeldet als Benutzer", string.Format("[{0}] {1}", logedInUserId, logedInUserName)));
                builder.Append(MelBoxWeb.HtmlLogout());
            }
#if DEBUG
            builder.Append("<p class='w3-pink'>" + payload + "</p>");
#endif
            context.Response.SendResponse(MelBoxWeb.HtmlCanvas(builder.ToString(), caption, logedInUserName, newGuid));
            return(context);
        }
        public IHttpContext ResponseShiftEdit(IHttpContext context)
        {
            string payload = context.Request.Payload;
            Dictionary <string, string> args = MelBoxWeb.ReadPayload(payload);

            ReadGlobalFields(args);

            int           shiftId     = 0;
            DateTime      date        = DateTime.MinValue;
            int           shiftUserId = logedInUserId;
            DataTable     dt          = Program.Sql.GetViewShift();
            StringBuilder builder     = new StringBuilder();

            if (args.ContainsKey("selectedRow"))
            {
                if (args["selectedRow"].StartsWith("Datum_"))
                {
                    DateTime.TryParse(args["selectedRow"].ToString().Substring(6), out date);
                }
                else
                {
                    int.TryParse(args["selectedRow"].ToString(), out shiftId);
                }
            }

            if (args.ContainsKey("selectedContact"))
            {
                int.TryParse(args["selectedContact"].ToString(), out shiftUserId);
            }
            else if (args.ContainsKey("ContactId"))
            {
                int.TryParse(args["ContactId"].ToString(), out shiftUserId);
            }

            builder.Append(MelBoxWeb.HtmlFormShift(date, shiftId, shiftUserId, isAdmin));

            const string infoTitel = "Info Bereitschaft";
            const string infoText  = "Eine Einheit Bereitschaft findet immer über einen Tageswechsel statt.<br> Am ausgewählten Datum zur Stunde 'Beginn' werden Nachrichten weitergeleitet bis zur Stunde 'Ende' am Folgetag.<br>" +
                                     "Ist beim Erstellen einer neuen Bereitschaft das Kästchen 'Bereitschaftswoche' angehakt wird die Bereitschaft für die komplette Kalenderwoche erstellt, in der das ausgewählte Datum liegt.";

            builder.Append(MelBoxWeb.HtmlInfoSidebar(infoTitel, infoText));
#if DEBUG
            builder.Append("<p class='w3-pink'>" + payload + "</p>");
#endif
            context.Response.SendResponse(MelBoxWeb.HtmlCanvas(builder.ToString(), dt.TableName, logedInUserName));
            return(context);
        }
        public IHttpContext ResponseCompany(IHttpContext context)
        {
            string caption   = "Firmenkonto";
            int    companyId = 0;
            string payload   = context.Request.Payload;
            Dictionary <string, string> args = MelBoxWeb.ReadPayload(payload);

            ReadGlobalFields(args);

            if (args.ContainsKey("CompanyId"))
            {
                int.TryParse(args["CompanyId"].ToString(), out companyId);
            }

            //Dictionary<string, string> action = new Dictionary<string, string>();
            //if (isAdmin)
            //{
            //    action.Add("/company/create", "Firma neu anlegen");
            //    action.Add("/company/update", "Firmeninformationen ändern");
            //    action.Add("/company/delete", "Firma löschen");
            //}

            DataTable dtCompany = Program.Sql.GetCompany();

            StringBuilder builder = new StringBuilder();

            builder.Append(MelBoxWeb.HtmlFormCompany(dtCompany, companyId, isAdmin));
            //builder.Append(MelBoxWeb.HtmlEditor(action));

            int chosenContactId = logedInUserId;

            if (requestingPage == caption && args.ContainsKey("selectedContactId")) //Ist Antwort von dieser Seite
            {
                int.TryParse(args["selectedContactId"].ToString(), out chosenContactId);
            }
            else if (chosenContactId == 0)
            {
                builder.Append(MelBoxWeb.HtmlAlert(2, "Ungültiger Aufruf", "Für Einsicht Benutzerkonto bitte einloggen."));
            }

#if DEBUG
            builder.Append("<p class='w3-pink w3-mobile'>" + payload + "</p>");
#endif
            context.Response.SendResponse(MelBoxWeb.HtmlCanvas(builder.ToString(), caption, logedInUserName));
            return(context);
        }
        public IHttpContext ResponseBlockedCreate(IHttpContext context)
        {
            string payload = context.Request.Payload;
            Dictionary <string, string> args = MelBoxWeb.ReadPayload(payload);

            ReadGlobalFields(args);

            #region Inhalt ermitteln
            int recMsgId = MelBoxWeb.GetArgInt(args, "selectedRow");

            int contentId = Program.Sql.GetContentId(recMsgId);
            #endregion

            StringBuilder builder = new StringBuilder();

            if (contentId == 0)
            {
                builder.Append(MelBoxWeb.HtmlAlert(1, "Fehler", "Die übergebene Nachricht konnte nicht zugeordnet werden."));
            }
            else
            {
                Program.Sql.InsertMessageBlocked(contentId);
                string msg = "Die Weiterleitung der Nachricht Nr. " + contentId + " wurde durch den Benutzer '" + logedInUserName + "' zu bestimmten Zeiten gesperrt.";

                builder.Append(MelBoxWeb.HtmlAlert(3, "Nachricht in die Sperrliste aufgenommen", msg));

                Program.Sql.Log(MelBoxSql.LogTopic.Shift, MelBoxSql.LogPrio.Warning, msg);
            }

            Dictionary <string, string> action = new Dictionary <string, string>();

            if (isAdmin)
            {
                action.Add("/blocked/update", "Gesperrte Nachricht bearbeiten");
                action.Add("/blocked/delete", "Aus Sperrliste entfernen");
            }

            DataTable dt = Program.Sql.GetViewMsgBlocked();
            builder.Append(MelBoxWeb.HtmlTableBlocked(dt, 0, isAdmin));
            builder.Append(MelBoxWeb.HtmlEditor(action));
#if DEBUG
            builder.Append("<p class='w3-pink'>" + payload + "</p>");
#endif
            context.Response.SendResponse(MelBoxWeb.HtmlCanvas(builder.ToString(), dt.TableName, logedInUserName));
            return(context);
        }
        public IHttpContext ResponseRegister(IHttpContext context)
        {
            string payload = context.Request.Payload;
            Dictionary <string, string> args = MelBoxWeb.ReadPayload(payload);

            ReadGlobalFields(args);

            StringBuilder builder = new StringBuilder();

            builder.Append(MelBoxWeb.HtmlAlert(4, "Registrierung", "Anfragen zur Registrierung gehen an den Administrator, der sie händisch freigeschaltet. <br>Bei Anfrage bitte den gewünschten Nutzernamen angeben. <br>Nach Freischaltung bitte selbst unter 'Account' ein Passwort vergeben."));
            builder.Append(MelBoxWeb.HtmlAlert(2, "Bitte beachten", "Es ist zur Zeit keine Registrierungs-Prozedur implementiert. <a href='mailto:[email protected]'>Email</a>"));

#if DEBUG
            builder.Append("<p class='w3-pink'>" + payload + "</p>");
#endif
            context.Response.SendResponse(MelBoxWeb.HtmlCanvas(builder.ToString(), "Registrierung", logedInUserName));
            return(context);
        }
        public IHttpContext ResponseAccountUpdate(IHttpContext context)
        {
            string payload = context.Request.Payload;

            Dictionary <string, string> args = MelBoxWeb.ReadPayload(payload);

            ReadGlobalFields(args);

            StringBuilder builder         = new StringBuilder();
            int           chosenContactId = MelBoxWeb.GetArgInt(args, "ContactId");

            if (!isAdmin && chosenContactId != logedInUserId)
            {
                builder.Append(MelBoxWeb.HtmlAlert(2, "Keine Berechtigung", "Sie haben keine Berechtigung den Benutzer zu ändern."));
            }
            else
            {
                builder.Append(MelBoxWeb.ProcessFormAccount(args, false));
            }

            if (logedInUserId != 0)
            {
                DataTable dt;
                if (isAdmin)
                {
                    dt = Program.Sql.GetViewContactInfo();
                }
                else
                {
                    dt = Program.Sql.GetViewContactInfo(chosenContactId);
                }

                DataTable dtCompany = Program.Sql.GetCompany();

                builder.Append(MelBoxWeb.HtmlFormAccount(dt, dtCompany, chosenContactId, isAdmin));
            }

#if DEBUG
            builder.Append("<p class='w3-pink w3-mobile'>" + payload + "</p>");
#endif
            context.Response.SendResponse(MelBoxWeb.HtmlCanvas(builder.ToString(), "Benutzerkonto ändern", logedInUserName));
            return(context);
        }
        public IHttpContext ResponseAccountDelete(IHttpContext context)
        {
            string payload = context.Request.Payload;

            Dictionary <string, string> args = MelBoxWeb.ReadPayload(payload);

            ReadGlobalFields(args);

            StringBuilder builder = new StringBuilder();

            if (!isAdmin)
            {
                builder.Append(MelBoxWeb.HtmlAlert(2, "Keine Berechtigung", "Sie haben keine Berechtigung den Benutzer zu löschen."));
            }
            else
            {
                int.TryParse(args["ContactId"].ToString(), out int contactId);
                string name = args["Name"];

                if (contactId == 0)
                {
                    builder.Append(MelBoxWeb.HtmlAlert(2, "Fehler", "Der Benutzer '" + name + "' konnte nicht gelöscht werden. Der Aufruf war fehlerhaft."));
                }
                else
                {
                    if (!Program.Sql.DeleteContact(contactId))
                    {
                        builder.Append(MelBoxWeb.HtmlAlert(2, "Fehler beim löschen von '" + name + "'", "Der Benutzer " + contactId + " '" + name + "' konnte nicht aus der Datenbank gelöscht werden."));
                    }
                    else
                    {
                        builder.Append(MelBoxWeb.HtmlAlert(3, "Benutzer '" + name + "' gelöscht", "Der Benutzer " + contactId + " '" + name + "' wurde aus der Datenbank gelöscht."));
                    }
                }
            }
#if DEBUG
            builder.Append("<p class='w3-pink w3-mobile'>" + payload + "</p>");
#endif
            context.Response.SendResponse(MelBoxWeb.HtmlCanvas(builder.ToString(), "Benutzerkonto löschen", logedInUserName));
            return(context);
        }
        public IHttpContext ResponseCompanyDelete(IHttpContext context)
        {
            string payload = context.Request.Payload;

            Dictionary <string, string> args = MelBoxWeb.ReadPayload(payload);

            ReadGlobalFields(args);

            StringBuilder builder = new StringBuilder();

            if (!isAdmin)
            {
                builder.Append(MelBoxWeb.HtmlAlert(2, "Keine Berechtigung", "Sie haben keine Berechtigung den Firmeneintrag zu löschen."));
            }
            else
            {
                int companyId = MelBoxWeb.GetArgInt(args, "CompanyId");
                if (companyId != 0)
                {
                    string name = MelBoxWeb.GetArgStr(args, "Name");//.Replace('+', ' ');
                    if (!Program.Sql.DeleteCompany(companyId))
                    {
                        builder.Append(MelBoxWeb.HtmlAlert(2, "Fehler beim Löschen von Firma '" + name + "'", "Die Firma '" + name + "' konnte nicht aus der Datenbank gelöscht werden."));
                    }
                    else
                    {
                        builder.Append(MelBoxWeb.HtmlAlert(3, "Firma '" + name + "'gelöscht", "Die Firma '" + name + "' wurde aus der Datenbank gelöscht."));
                    }
                }
                else
                {
                    builder.Append(MelBoxWeb.HtmlAlert(1, "Ungültiger Aufruf", "Die Firmeninformationen konnten nicht zugewiesen werden."));
                }
            }
#if DEBUG
            builder.Append("<p class='w3-pink w3-mobile'>" + payload + "</p>");
#endif
            context.Response.SendResponse(MelBoxWeb.HtmlCanvas(builder.ToString(), "Firmenkonto löschen", logedInUserName));
            return(context);
        }
        public IHttpContext ResponseShiftCreateOrUpdate(IHttpContext context)
        {
            string payload = context.Request.Payload;
            Dictionary <string, string> args = MelBoxWeb.ReadPayload(payload);

            ReadGlobalFields(args);

            StringBuilder builder = new StringBuilder();

            if (logedInUserId == 0)
            {
                builder.Append(MelBoxWeb.HtmlAlert(1, "Fehler", "Der eingeloggte Benutzer konnte nicht zugeordnet werden."));
            }
            else
            {
                builder.Append(MelBoxWeb.ProcessFormShift(args, logedInUserId, isAdmin));
            }

            #region Tabelle anzeigen
            Dictionary <string, string> action = new Dictionary <string, string>
            {
                { "/shift/edit", "Bereitschaft bearbeiten" }
            };

            if (isAdmin)
            {
                action.Add("/shift/delete", "Bereitschaft löschen");
            }

            DataTable dt = Program.Sql.GetViewShift();
            builder.Append(MelBoxWeb.HtmlTableShift(dt, 0, logedInUserId, isAdmin));
            builder.Append(MelBoxWeb.HtmlEditor(action));
            #endregion
#if DEBUG
            builder.Append("<p class='w3-pink'>" + payload + "</p>");
#endif
            context.Response.SendResponse(MelBoxWeb.HtmlCanvas(builder.ToString(), "Bereitschaft erstellen", logedInUserName));
            return(context);
        }
        private void ReadGlobalFields(Dictionary <string, string> args)
        {
            if (args.ContainsKey("guid"))
            {
                guid = args["guid"];
                User user = MelBoxWeb.GetUserFromGuid(guid);

                if (user != null)
                {
                    logedInUserName = user.Name;
                    logedInUserId   = user.Id;
                    isAdmin         = user.IsAdmin;
                }
            }

            if (args.ContainsKey("pageTitle"))
            {
                requestingPage = args["pageTitle"];
            }
#if DEBUG
            // Console.WriteLine("Aufruf von {0} durch: [{1}] {2} - Admin: {3} | {4}", requestingPage, logedInUserId, logedInUserName, isAdmin, guid);
#endif
        }
        public IHttpContext ResponseLog(IHttpContext context)
        {
            string payload = context.Request.Payload;
            Dictionary <string, string> args = MelBoxWeb.ReadPayload(payload);

            ReadGlobalFields(args);

            DateTime von = DateTime.UtcNow.AddDays(-2);
            DateTime bis = DateTime.UtcNow;

            string vonStr = MelBoxWeb.GetArgStr(args, "von");
            string bisStr = MelBoxWeb.GetArgStr(args, "bis");

            if (vonStr.Length > 9)
            {
                DateTime.TryParse(vonStr, out von);
            }

            if (bisStr.Length > 9)
            {
                DateTime.TryParse(bisStr, out bis);
            }

            DataTable dt = Program.Sql.GetViewLog(von, bis.AddDays(1));

            StringBuilder builder = new StringBuilder();


            builder.Append(MelBoxWeb.HtmlFormLog(von, bis));
            builder.Append(MelBoxWeb.HtmlTablePlain(dt, false));

#if DEBUG
            builder.Append("<p class='w3-pink'>" + payload + "</p>");
#endif
            context.Response.SendResponse(MelBoxWeb.HtmlCanvas(builder.ToString(), dt.TableName, logedInUserName));
            return(context);
        }
        public IHttpContext ResponseCompanyUpdate(IHttpContext context)
        {
            string payload = context.Request.Payload;

            Dictionary <string, string> args = MelBoxWeb.ReadPayload(payload);

            ReadGlobalFields(args);

            StringBuilder builder = new StringBuilder();

            if (!isAdmin)
            {
                builder.Append(MelBoxWeb.HtmlAlert(2, "Keine Berechtigung", "Sie haben keine Berechtigung den Firmeneintrag zu ändern."));
            }
            else
            {
                builder.Append(MelBoxWeb.ProcessFormCompany(args, false));
            }
#if DEBUG
            builder.Append("<p class='w3-pink w3-mobile'>" + payload + "</p>");
#endif
            context.Response.SendResponse(MelBoxWeb.HtmlCanvas(builder.ToString(), "Firmenkonto ändern", logedInUserName));
            return(context);
        }
        public static string ProcessFormShift(Dictionary <string, string> args, int logedInUserId, bool isAdmin)
        {
            StringBuilder builder = new StringBuilder();

            int      shiftUserId     = logedInUserId;
            int      shiftId         = 0;
            string   name            = "-KEIN NAME-";
            DateTime date            = DateTime.MinValue;
            int      beginHour       = 17;
            int      endHour         = 7;
            bool     createWeekShift = false;

            //  bool createNewShift = false;

            foreach (string arg in args.Keys)
            {
                switch (arg)
                {
                case "selectedRow":
                    if (args[arg].StartsWith("Datum_"))
                    {
                        DateTime.TryParse(args["selectedRow"].ToString().Substring(6), out date);
                    }
                    else
                    {
                        int.TryParse(args["selectedRow"].ToString(), out shiftId);
                    }
                    break;

                case "ContactId":
                    int.TryParse(args[arg].ToString(), out shiftUserId);
                    break;

                case "Name":
                    name = args[arg];    //.Replace('+', ' ');
                    break;

                case "Datum":
                    if (date == DateTime.MinValue)
                    {
                        date = DateTime.Parse(args["Datum"].ToString()).Date;
                    }
                    break;

                case "Beginn":
                    beginHour = int.Parse(args[arg]);
                    break;

                case "Ende":
                    endHour = int.Parse(args[arg]);
                    break;

                case "CreateWeekShift":
                    // if (args[arg].ToLower() == "on")
                    createWeekShift = true;
                    break;
                }
            }

            if (shiftUserId == 0)
            {
                builder.Append(MelBoxWeb.HtmlAlert(1, "Fehler Zuordnung", string.Format("Der Benutzer konnte der Bereitschaft nicht zugewiesen werden.")));
                return(builder.ToString());
            }

            if (shiftId == 0)
            {
                //Neu erstellen
                DateTime firstStartTime = DateTime.Now;
                DateTime lastEndTime    = DateTime.Now;

                if (createWeekShift)
                {
                    date = date.AddDays(DayOfWeek.Monday - date.DayOfWeek);

                    for (int i = 0; i < 7; i++)
                    {
                        DateTime StartTime = MelBoxSql.ShiftStandardStartTime(date);
                        DateTime EndTime   = MelBoxSql.ShiftStandardEndTime(date);

                        if (i == 0)
                        {
                            firstStartTime = StartTime;
                        }
                        if (i == 6)
                        {
                            lastEndTime = EndTime;
                        }

                        Program.Sql.InsertShift(shiftUserId, StartTime, EndTime);
                        date = date.AddDays(1);
                    }
                }
                else
                {
                    DateTime StartTime = date.AddHours(beginHour);
                    DateTime EndTime   = date.AddDays(1).AddHours(endHour);

                    firstStartTime = StartTime;
                    lastEndTime    = EndTime;

                    Program.Sql.InsertShift(shiftUserId, StartTime, EndTime);
                }

                builder.Append(MelBoxWeb.HtmlAlert(3, "Neue Bereitschaft erstellt", string.Format("Neue Bereitschaft für '{0}' vom {1} bis {2} erstellt.", name, firstStartTime, lastEndTime)));
            }
            else
            {
                //Update
                if (shiftUserId != logedInUserId && !isAdmin)
                {
                    builder.Append(MelBoxWeb.HtmlAlert(2, "Nicht änderbar", string.Format("Sie können nur ihre eigenen Bereitschaftszeiten bearbeiten.")));
                }

                ////Admin: Darstellung anderer User
                //if (shiftUserId == 0) contactId = logedInContactId;
                //else logedInContactId = contactId;

                DateTime StartTime = date.AddHours(beginHour);
                DateTime EndTime   = date.AddDays(1).AddHours(endHour);

                if (!Program.Sql.UpdateShift(shiftId, shiftUserId, StartTime, EndTime))
                {
                    builder.Append(MelBoxWeb.HtmlAlert(1, "Fehler Bereitschaft  Nr. " + shiftId + " bearbeiten",
                                                       string.Format("Die Bereitschaft konnte nicht in der Datenbank geändert werden.")));
                }
                else
                {
                    builder.Append(MelBoxWeb.HtmlAlert(3, "Bereitschaft Nr. " + shiftId + " geändert",
                                                       string.Format("Die Bereitschaft Nr. {0} wurde geändert auf {1} im Zeitraum {2} bis {3}.", shiftId, name, StartTime, EndTime)));
                }
            }


            return(builder.ToString());
        }
        public IHttpContext ResponseBlockedUpdate(IHttpContext context)
        {
            string payload = context.Request.Payload;
            Dictionary <string, string> args = MelBoxWeb.ReadPayload(payload);

            ReadGlobalFields(args);

            #region Inhalt ermitteln
            int recMsgId  = MelBoxWeb.GetArgInt(args, "selectedRow");
            int beginHour = MelBoxWeb.GetArgInt(args, "Beginn");
            int endHour   = MelBoxWeb.GetArgInt(args, "Ende");
            int contentId = recMsgId;
            #endregion

            StringBuilder builder = new StringBuilder();

            if (args.ContainsKey("Beginn") && args.ContainsKey("Ende"))
            {
                //int beginHour = int.Parse(args["Beginn"].ToString());
                //int endHour = int.Parse(args["Ende"].ToString());

                MelBoxSql.BlockedDays days = MelBoxSql.BlockedDays.None;
                if (args.ContainsKey("Mo"))
                {
                    days |= MelBoxSql.BlockedDays.Monday;
                }
                if (args.ContainsKey("Di"))
                {
                    days |= MelBoxSql.BlockedDays.Tuesday;
                }
                if (args.ContainsKey("Mi"))
                {
                    days |= MelBoxSql.BlockedDays.Wendsday;
                }
                if (args.ContainsKey("Do"))
                {
                    days |= MelBoxSql.BlockedDays.Thursday;
                }
                if (args.ContainsKey("Fr"))
                {
                    days |= MelBoxSql.BlockedDays.Friday;
                }
                if (args.ContainsKey("Sa"))
                {
                    days |= MelBoxSql.BlockedDays.Saturday;
                }
                if (args.ContainsKey("So"))
                {
                    days |= MelBoxSql.BlockedDays.Sunday;
                }

                if (Program.Sql.UpdateMessageBlocked(contentId, beginHour, endHour, days))
                {
                    builder.Append(MelBoxWeb.HtmlAlert(3, "Sperrzeiten geändert", "Die Sperrzeiten für Nachricht Nr. " + contentId + " wurden geändert."));
                }
                else
                {
                    builder.Append(MelBoxWeb.HtmlAlert(2, "Sperrzeiten nicht geändert", "Die Sperrzeiten für Nachricht Nr. " + contentId + " konnten nicht geändert werden."));
                }
            }

            Dictionary <string, string> action = new Dictionary <string, string>();

            if (isAdmin)
            {
                action.Add("/blocked/update", "Änderungen speichern");
                action.Add("/blocked/delete", "Aus Sperrliste entfernen");
            }

            DataTable dt = Program.Sql.GetViewMsgBlocked();
            builder.Append(MelBoxWeb.HtmlTableBlocked(dt, contentId, isAdmin));
            builder.Append(MelBoxWeb.HtmlEditor(action));
#if DEBUG
            builder.Append("<p class='w3-pink'>" + payload + "</p>");
#endif
            context.Response.SendResponse(MelBoxWeb.HtmlCanvas(builder.ToString(), dt.TableName, logedInUserName));
            return(context);
        }
        /// <summary>
        /// Verarbeitet die Anfrage aus dem Formular 'Benutzerkonto'
        /// </summary>
        /// <param name="args"></param>
        /// <param name="createNewAccount">Soll ein neuer Benutzer erstellt werden?</param>
        /// <returns>html - Rückmeldung der ausgeführten Operation</returns>
        public static string ProcessFormAccount(Dictionary <string, string> args, bool createNewAccount)
        {
            StringBuilder builder = new StringBuilder();

            int    contactId     = 0;
            string name          = "-KEIN NAME-";
            string password      = null;
            int    companyId     = -1;
            string email         = null;
            ulong  phone         = 0;
            int    sendSms       = 0; //Hinweis: <input type='checkbox' > wird nur übertragen, wenn angehakt => immer zurücksetzten, wenn nicht gesetzt
            int    sendEmail     = 0;
            int    maxInactivity = -1;

            foreach (string arg in args.Keys)
            {
                switch (arg)
                {
                //case "pageTitle":
                //    if (args[arg] != "Benutzerkonto")
                //    {
                //        builder.Append(MelBoxWeb.HtmlAlert(1, "Ungültiger Aufruf", "Aufruf von ungültiger Stelle."));
                //    }
                //    break;
                case "ContactId":
                    contactId = int.Parse(args[arg]);
                    break;

                case "Name":
                    name = args[arg];    //.Replace('+', ' ');
                    break;

                case "Passwort":
                    if (args[arg].Length > 1)
                    {
                        password = args[arg];
                    }
                    break;

                case "CompanyId":
                    companyId = int.Parse(args[arg]);
                    break;

                case "Email":
                    email = args[arg];
                    break;

                case "Telefon":
                    phone = GsmConverter.StrToPhone(args[arg]);
                    break;

                case "Max_Inaktiv":
                    maxInactivity = int.Parse(args[arg]);
                    break;

                case "SendSms":
                    if (args[arg].ToLower() == "on")
                    {
                        sendSms = 1;
                    }
                    else
                    {
                        sendSms = 0;
                    }
                    break;

                case "SendEmail":
                    if (args[arg].ToLower() == "on")
                    {
                        sendEmail = 1;
                    }
                    else
                    {
                        sendEmail = 0;
                    }
                    break;

                default:
                    break;
                }
            }

            if (createNewAccount)
            {
                if (password == null || password.Length < 4)
                {
                    builder.Append(MelBoxWeb.HtmlAlert(2, "Fehler - Passwort ungültig", "Das vergebene Passwort entspricht nicht den Vorgaben. Der Benutzer wird nicht erstellt."));
                }
                else
                {
                    int newId = Program.Sql.InsertContact(name, password, companyId, email, phone, maxInactivity, sendSms == 1, sendEmail == 1);
                    if (newId == 0)
                    {
                        builder.Append(MelBoxWeb.HtmlAlert(1, "Fehler beim Schreiben in die Datenbank", "Der Benutzer '" + name + "' konnte nicht erstellt werden."));
                    }
                    else
                    {
                        builder.Append(MelBoxWeb.HtmlAlert(3, "Benutzer '" + name + "' erstellt", "Der Benutzer '" + name + "' wurde in der Datenbank neu erstellt."));
                    }
                }
            }
            else
            {
                if (!Program.Sql.UpdateContact(contactId, name, password, companyId, phone, sendSms, email, sendEmail, string.Empty, maxInactivity))
                {
                    builder.Append(MelBoxWeb.HtmlAlert(2, "Keine Änderungen für Benutzer '" + name + "'", "Die Änderungen konnten nicht in die Datenbank übertragen werden."));
                }
                else
                {
                    builder.Append(MelBoxWeb.HtmlAlert(3, "Änderungen für Benutzer '" + name + "' übernommen", "Die Änderungen an Benutzer '" + name + "' wurden in der Datenbank gespeichert."));
                }
            }

            return(builder.ToString());
        }
        public IHttpContext ResponseShiftDelete(IHttpContext context)
        {
            string payload = context.Request.Payload;
            Dictionary <string, string> args = MelBoxWeb.ReadPayload(payload);

            ReadGlobalFields(args);

            StringBuilder builder = new StringBuilder();
            int           shiftId = 0;

            if (args.ContainsKey("selectedRow"))
            {
                int.TryParse(args["selectedRow"].ToString(), out shiftId);
            }

            if (logedInUserId == 0)
            {
                builder.Append(MelBoxWeb.HtmlAlert(1, "Fehler", "Der eingeloggte Benutzer konnte nicht zugeordnet werden."));
            }
            else if (!isAdmin)
            {
                builder.Append(MelBoxWeb.HtmlAlert(2, "Keine Berechtigung", "Sie besitzen nicht die notwendigen Rechte für diese Aktion."));
            }
            else if (shiftId == 0)
            {
                builder.Append(MelBoxWeb.HtmlAlert(1, "Fehler Bereitschaft löschen", "Fehlerhafter Aufruf. Die zu löschende Bereitschaft konnte nicht zugeordnet werden."));
            }
            else
            {
                if (!Program.Sql.DeleteShift(shiftId))
                {
                    builder.Append(MelBoxWeb.HtmlAlert(1, "Fehler Bereitschaft  Nr. " + shiftId + " löschen",
                                                       string.Format("Die Bereitschaft konnte nicht aus der Datenbank gelöscht werden.")));
                }
                else
                {
                    string msg = string.Format("Die Bereitschaft Nr. {0} wurde durch den Benutzer '{1}' gelöscht.", shiftId, logedInUserName);

                    builder.Append(MelBoxWeb.HtmlAlert(3, "Bereitschaft Nr. " + shiftId + " gelöscht", msg));

                    Program.Sql.Log(MelBoxSql.LogTopic.Shift, MelBoxSql.LogPrio.Warning, msg);
                }
            }

            #region Tabelle anzeigen
            Dictionary <string, string> action = new Dictionary <string, string>
            {
                { "/shift/edit", "Bereitschaft bearbeiten" }
            };

            if (isAdmin)
            {
                action.Add("/shift/delete", "Bereitschaft löschen");
            }

            DataTable dt = Program.Sql.GetViewShift();

            builder.Append(MelBoxWeb.HtmlTableShift(dt, 0, logedInUserId, isAdmin));
            builder.Append(MelBoxWeb.HtmlEditor(action));
            #endregion

#if DEBUG
            builder.Append("<p class='w3-pink'>" + payload + "</p>");
#endif
            context.Response.SendResponse(MelBoxWeb.HtmlCanvas(builder.ToString(), "Bereitschaft löschen", logedInUserName));
            return(context);
        }
        public IHttpContext ResponseGsm(IHttpContext context)
        {
            string payload = context.Request.Payload;
            Dictionary <string, string> args = MelBoxWeb.ReadPayload(payload);

            ReadGlobalFields(args);

            StringBuilder builder = new StringBuilder();

            #region Tabelle füllen
            DataTable dt = new DataTable();
            dt.Columns.Add("Parameter", typeof(string));
            dt.Columns.Add("Wert", typeof(string));

            string para  = "Status GSM-Modem";
            string value = GlobalProperty.ConnectedToModem ? "angeschlossen" : "keine Verbindung";
            dt.Rows.Add(para, value);

            //para = "Hersteller"; //Modem-Antort ohne +CNMI
            //value = GlobalProperty.ModemManufacturer;
            //dt.Rows.Add(para, value);

            para  = "SIM-Schubfach erkannt";
            value = GlobalProperty.SimHolderDetected ? "erkannt" : "nicht erkannt";
            dt.Rows.Add(para, value);

            para  = "Eigene Telefonnummer";
            value = "+" + GlobalProperty.OwnPhone;
            dt.Rows.Add(para, value);

            para  = "Registrierung Mobilfunknetz";
            value = GlobalProperty.NetworkRegistrationStatus;
            dt.Rows.Add(para, value);

            para  = "Mobilfunkanbieter";
            value = GlobalProperty.NetworkProviderName;
            dt.Rows.Add(para, value);

            para  = "SMS Service Center";
            value = GlobalProperty.NetworkServiceCenterNumber;
            dt.Rows.Add(para, value);

            para  = "Mobilfunknetz Empfangsqualität";
            value = string.Format("{0:0}%", GlobalProperty.GsmSignalQuality);
            dt.Rows.Add(para, value);

            para  = "Fehlende Empfangsbestätigungen";
            value = string.Format("{0}", GlobalProperty.SmsPendingReports);
            dt.Rows.Add(para, value);

            para  = "SMS-Text für Meldeweg Test";
            value = GlobalProperty.SmsRouteTestTrigger;
            dt.Rows.Add(para, value);

            para  = "Zuletzt gesendete SMS";
            value = GlobalProperty.LastSmsSend;
            dt.Rows.Add(para, value);
            #endregion

            builder.Append(MelBoxWeb.HtmlTablePlain(dt, false));
#if DEBUG
            builder.Append("<p class='w3-pink'>" + payload + "</p>");
#endif
            context.Response.SendResponse(MelBoxWeb.HtmlCanvas(builder.ToString(), "Status Modem", logedInUserName));
            return(context);
        }
示例#26
0
        private static void Main()
        {
            try
            {
                Console.BufferHeight = 1000; //Max. Zeilen in Konsole, bei Überlauf werden älteste Zeilen entfernt
                Console.WriteLine("Programm gestartet. Konsole mit max. {0} Zeilen.", Console.BufferHeight);

                Email.PermanentEmailRecievers = Properties.Settings.Default.PermanentEmailRecievers.Cast <string>().ToList();
                Email.MelBox2Admin            = new System.Net.Mail.MailAddress("*****@*****.**", "MelBox2 Admin"); //Properties gehen nicht?

                Gsm_Basics.ComPortName   = Properties.Settings.Default.ComPort;
                Gsm_Basics.BaudRate      = Properties.Settings.Default.BaudRate;
                Gsm_Basics.GsmConnected += HandleGsmEvent;
                Gsm_Basics.GsmEvent     += HandleGsmEvent;

                Gsm.GsmSignalQualityEvent += HandleGsmEvent;
                Gsm.SmsRecievedEvent      += HandleSmsRecievedEvent;
                Gsm.SmsSentEvent          += HandleSmsSentEvent;
                Gsm.SmsStatusreportEvent  += HandleSmsStatusReportEvent;

                MelBoxWeb.StartWebServer();

                Sql.Log(MelBoxSql.LogTopic.Start, MelBoxSql.LogPrio.Info, string.Format("MelBox2 - Anwendung gestartet. {0}, {1} Baud", Gsm_Basics.ComPortName, Gsm_Basics.BaudRate));

                InitDailyCheck(Properties.Settings.Default.HourOfDailyCheck);   //Führt täglich morgens um 8 Uhr Routinecheck aus

                //TEST
                Sql.InsertMessageRec("Testnachricht am " + DateTime.Now.Date, 4915142265412);

                //Auskommentiert für Test WebServer
                Gsm.Connect();

#if DEBUG
                Console.WriteLine("\r\nDEBUG Mode: es wird keine StartUp-Info an MelBox2-Admin gesendet.");
                //Email.Send(Email.MelBox2Admin, "MelBox2 - Anwendung neu gestartet um " + DateTime.Now);
#else
                //Gsm.SmsSend(Properties.Settings.Default.MelBoxAdminPhone, "MelBox2 - Anwendung neu gestartet um " + DateTime.Now); //besser Email
                Email.Send(Email.MelBox2Admin, "MelBox2 - Anwendung neu gestartet um " + DateTime.Now);
#endif

                const string help = "\r\n- ENTF zum Aufräumen der Anzeige\r\n" +
                                    "- EINF für AT-Befehl\r\n" +
                                    "- ESC Taste zum beenden...\r\n";

                Console.WriteLine(help);

                while (true)
                {
                    ConsoleKeyInfo pressed = Console.ReadKey();
                    //Console.WriteLine("Gedrückt: " + pressed.KeyChar);

                    if (pressed.Key == ConsoleKey.Escape)
                    {
                        break;
                    }

                    if (pressed.Key == ConsoleKey.Delete)
                    {
                        Console.Clear();
                        GlobalProperty.ShowOnConsole();
                        Console.WriteLine(help);
                    }

                    //if (pressed.Key == ConsoleKey.O)
                    //{
                    //    Console.Clear();
                    //    GlobalProperty.ShowOnConsole();
                    //    //Console.WriteLine("\r\nOPTIONEN:\r\n\tModem: Umschalten eingehend");
                    //    //Console.WriteLine((byte)GsmEventArgs.Telegram.GsmError + ":\t" + GsmEventArgs.Telegram.GsmError);
                    //    //Console.WriteLine((byte)GsmEventArgs.Telegram.GsmSystem + ":\t" + GsmEventArgs.Telegram.GsmSystem);
                    //    //Console.WriteLine((byte)GsmEventArgs.Telegram.GsmConnection + ":\t" + GsmEventArgs.Telegram.GsmConnection);
                    //    //Console.WriteLine((byte)GsmEventArgs.Telegram.GsmSignal + ":\t" + GsmEventArgs.Telegram.GsmSignal);
                    //    //Console.WriteLine((byte)GsmEventArgs.Telegram.GsmOwnPhone + ":\t" + GsmEventArgs.Telegram.GsmOwnPhone);
                    //    //Console.WriteLine((byte)GsmEventArgs.Telegram.GsmOwnPhone + ":\t" + GsmEventArgs.Telegram.GsmOwnPhone);

                    //    //Console.WriteLine("Konsolenanzeige: Bitweise Filter setzten (sperren):");
                    //    //Console.WriteLine("\r\n\tBitte Nummer auswählen.");

                    //    //string input = Console.ReadLine();
                    //    //if (byte.TryParse(input, out byte a))
                    //    //{
                    //    //    ConsoleDisplayBlock = a;
                    //    //}

                    //    Console.Clear();
                    //    Console.WriteLine(help);
                    //}

                    if (pressed.Key == ConsoleKey.Insert)
                    {
                        Console.WriteLine("AT-Befehl eingeben:");
                        string at = Console.ReadLine();
                        Gsm_Basics.AddAtCommand(at);
                    }
                }
            }
            finally
            {
                Console.WriteLine("Programm wird geschlossen...");
                MelBoxWeb.StopWebServer();
                Gsm_Basics.ClosePort();
                System.Threading.Thread.Sleep(3000);
            }
        }