Пример #1
0
        private void sendMessageToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //Lese alle Textfelder nacheinander aus und bastle ein Paket zusammen
            Dictionary <string, string> Paket = new Dictionary <string, string>();

            if (Server.udp_active() == true)
            {
                for (int i = 0; i < MessageTextboxName.Count; i++)
                {
                    TextBox NameBox  = MessageTextboxName[i];
                    TextBox ValueBox = MessageTextboxVariable[i];

                    if (NameBox.Text != "")
                    {
                        Paket.Add(NameBox.Text, ValueBox.Text);
                    }
                }
                //Paket wird versendet
                if (Paket.Count > 0)
                {
                    for (int i = 0; i < repeatUpDown.Value; i++)
                    {
                        statusBox1.print(i.ToString());
                        Server.SendData(Paket);
                        Thread.Yield();
                        Thread.Sleep(1);
                        Application.DoEvents();
                    }
                }
                else
                {
                    statusBox1.print("Packet not send, because no data was entered!");
                }
            }
        }
Пример #2
0
        private void Zeitgeber_Tick(object sender, EventArgs e)
        {
            Dictionary <string, string> keinGPS = new Dictionary <string, string>()
            {
                { "Latitude", "-" },
                { "Longitude", "-" },
                { "Height", "-" },
                { "Distance", "-1" }
            };


            //Erst nach 5 unlesbaren Paketen, wird GPS Position als nicht verfügbar gekennzeichnet
            byte failure_counter = 0;

            if (gps.IsOpen == true)
            {
                //Button verändern
                connection_button.Text = "Disconnect";

                string   data   = gps.ReadExisting();
                string[] strArr = data.Split('$');
                for (int i = 0; i < strArr.Length; i++)
                {
                    string   strTemp = strArr[i];
                    string[] lineArr = strTemp.Split(',');
                    if ((lineArr[0] == "GPGGA"))
                    {
                        try
                        {
                            // Display string representations of numbers for en-us culture
                            CultureInfo ci = new CultureInfo("en-us");

                            //Latitude
                            double XX   = Convert.ToDouble(lineArr[2].Substring(0, 2));   //str2num(c_array{5}(1:3));
                            double YY   = Convert.ToDouble(lineArr[2].Substring(2, 2));   //c_array{5}(4:5);
                            double ZZZZ = Convert.ToDouble(lineArr[2].Substring(5, 4));   //c_array{5}(7:end);
                            //Umrechnung nötig --> siehe Wikipedia
                            Latitude = Math.Round(XX + (YY + ZZZZ / 10000) / 60, 6);
                            //Latitude = lat.ToString("F06", ci);

                            //Longitude
                            XX   = Convert.ToDouble(lineArr[4].Substring(0, 3));   //str2num(c_array{5}(1:3));
                            YY   = Convert.ToDouble(lineArr[4].Substring(3, 2));   //c_array{5}(4:5);
                            ZZZZ = Convert.ToDouble(lineArr[4].Substring(6, 4));   //c_array{5}(7:end);
                            //Umrechnung nötig --> siehe Wikipedia
                            Longitude = Math.Round(XX + (YY + ZZZZ / 10000) / 60, 6);
                            //Longitude = lon.ToString("F06", ci);

                            //Height
                            GpsHeight     = lineArr[9];
                            gps_available = true;

                            //Anzeige der Entfernung vom letzten Messpunkt (bzw. ersten überhaupt empfangenen GPS-Punkt)
                            if (lastLatitude == 0)
                            {
                                lastLatitude = Latitude;
                            }
                            if (lastLongitude == 0)
                            {
                                lastLongitude = Longitude;
                            }

                            double s = GetDistance(lastLatitude, lastLongitude, Latitude, Longitude);

                            //Für die Anzeige optimieren
                            if (s >= 1000)
                            {
                                abstand_letzte_messung.Text = (s / 1000).ToString() + "k";
                            }
                            else
                            {
                                abstand_letzte_messung.Text = s.ToString();
                            }

                            //Neu zeichnen der Karte
                            this.Refresh();

                            //Daten versenden
                            // Example Dictionary again
                            Dictionary <string, string> GPSDaten = new Dictionary <string, string>()
                            {
                                { "Latitude", Latitude.ToString() },
                                { "Longitude", Longitude.ToString() },
                                { "Height", GpsHeight.ToString() },
                                { "Distance", s.ToString() }
                            };

                            Server.SendData(GPSDaten);
                            latitude_label.Text  = Latitude.ToString();
                            longitude_label.Text = Longitude.ToString();
                            height_label.Text    = GpsHeight.ToString();
                        }
                        catch
                        {
                            //Cannot Read GPS values
                            failure_counter++;
                            if (failure_counter > 5)
                            {
                                failure_counter             = 0;
                                Latitude                    = double.NaN;
                                Longitude                   = double.NaN;
                                GpsHeight                   = "GPS Unavailable";
                                gps_available               = false;
                                abstand_letzte_messung.Text = "---";
                                Server.SendData(keinGPS);
                                latitude_label.Text  = "---";
                                longitude_label.Text = "---";
                                height_label.Text    = "---";
                            }
                        }

                        try
                        {
                            //Zeit - Unabhängig von den Positionsdaten, da die GPS-Zeit auch bei nur einem Satelliten zur Vefügung steht
                            GpsTime = lineArr[1].Substring(0, 2) + ":" + lineArr[1].Substring(2, 2) + ":" + lineArr[1].Substring(4, 2);
                            Server.SendData("Time", GpsTime);
                        }
                        catch
                        {
                            GpsTime       = "GPS Unavailable";
                            gps_available = false;
                            Server.SendData(keinGPS);
                        }

                        //Zeige Uhrzeit im Statuslabel an
                        time_label.Text = GpsTime;
                    }
                }
            }
            else
            {
                Latitude                    = double.NaN;
                Longitude                   = double.NaN;
                GpsHeight                   = "COM Port Closed";
                Zeitgeber.Enabled           = false;
                abstand_letzte_messung.Text = "---";
                //Button verändern
                connection_button.Text = "Connect";
                Server.SendData("status", "GPS deactivated");
            }
        }
Пример #3
0
        /// <summary>
        /// Sobald der UDP-Server Daten empfängt, wird über Events diese Methode aufgerufen
        /// </summary>
        /// <param name="sender">Objekt der UDP-Server-Klasse, dass die Daten empfangen hat</param>
        /// <param name="e">Übermittelte Informationen</param>
        public void EmpfangeDaten(object sender, DatenEventArgs e)
        {
            Application.DoEvents();
            if ((e.Variablen_name == null) && (e.Paket == null))
            {
                return;
            }

            if (e.Paket == null)
            {
                //Mitteilung vom Server erhalten, z.B. Fehler, Statusbericht
                if (e.Variablen_name.Equals("error", StringComparison.InvariantCultureIgnoreCase) == true)
                {
                    error(null, "UDP-Server-Error: " + e.Inhalt);
                }
                else if (e.Variablen_name.Equals("hint", StringComparison.InvariantCultureIgnoreCase) == true)
                {
                    display("Hint from UDP-Server: " + e.Inhalt);
                }
            }
            else
            {
                //Paket empfangen
                //Unterscheidung ob Befehl oder normales Paket
                if (e.Inhalt == null)
                {
                    //Normales Paket
                }
                else
                {
                    string timestamp = "";
                    string befehl    = null;
                    //Befehl erhalten
                    switch (e.Inhalt)
                    {
                    case "name":

                        if (e.Paket.Timestamp != null)
                        {
                            Server.send_answer(true, "5", timestamp);                                    //500ms Wartezeit
                        }
                        Server.SendData("name", serverName);
                        if (e.Paket.Timestamp != null)
                        {
                            Server.send_answer(false, null, timestamp);
                        }
                        break;

                    case "shutdown":
                        if (e.Paket.Timestamp != null)
                        {
                            Server.send_answer(true, "5", timestamp);                                    //500ms Wartezeit
                        }
                        Shutdown("1");
                        if (e.Paket.Timestamp != null)
                        {
                            Server.send_answer(false, null, timestamp);
                        }
                        break;

                    case "cmd":
                        if (e.Paket.Timestamp != null)
                        {
                            Server.send_answer(true, "6000", timestamp);                                    //600s Wartezeit
                        }
                        if (e.Paket.Content.TryGetValue("value", out befehl))
                        {
                            Server.SendData("response", execute_cmd(befehl));
                        }

                        if (e.Paket.Timestamp != null)
                        {
                            Server.send_answer(false, null, timestamp);
                        }
                        break;

                    case "restart":
                    case "reboot":
                        if (e.Paket.Timestamp != null)
                        {
                            Server.send_answer(true, "5", timestamp);                                //500ms Wartezeit
                        }
                        Shutdown("6");
                        if (e.Paket.Timestamp != null)
                        {
                            Server.send_answer(false, null, timestamp);
                        }
                        break;

                    default:
                        display("Unknown Command received!");
                        Server.SendData("error", "Unknown Command received!");
                        break;
                    }
                }
            }
        }