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!"); } } }
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"); } }
/// <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; } } } }