// Logowanie do serwera sędziów private void buttonLogin_Click(object sender, EventArgs e) { string url = textBoxURL.Text; interopURL = url; // Tylko ponowne zalogowanie zmienia url serwera string uri = "/api/login"; string username = textBoxUsername.Text; string password = textBoxPassword.Text; string myParameters = "username="******"&" + "password="******"application/x-www-form-urlencoded"; // Potrzebne string httpResult = wc.UploadString(uri, myParameters); cookies = wc.CookieContainer; // Zapisuje otrzymane cookies textBoxHTTPResult.Text = httpResult; zalogowano = true; // textBoxHTTPResult.Text += "\nCookies: " + cookies.GetCookieHeader(new Uri(url + uri)); // Wyświetla cookies } }
// Wyslanie telemetrii private void buttonWysylajTelemetrie_Click(object sender, EventArgs e) { Thread myThread = new Thread(() => { int cnt = 10; Thread.CurrentThread.IsBackground = true; string url = interopURL; string uri = "/api/telemetry"; string httpResult = "Error: Bad URL or not logged in"; double latitude, longitude, altitude, course; while (true) { latitude = plugin.Host.cs.lat; longitude = plugin.Host.cs.lng; altitude = plugin.Host.cs.alt; course = plugin.Host.cs.groundcourse; string myParameters = "latitude=" + latitude.ToString(System.Globalization.CultureInfo.InvariantCulture) + "&" + // Kropki zamiast przecinków "longitude=" + longitude.ToString(System.Globalization.CultureInfo.InvariantCulture) + "&" + // Kropki zamiast przecinków "altitude_msl=" + altitude.ToString(System.Globalization.CultureInfo.InvariantCulture) + "&" + // Kropki zamiast przecinków "uas_heading=" + course.ToString(System.Globalization.CultureInfo.InvariantCulture); // Kropki zamiast przecinków using (CookieWebClient wc = new CookieWebClient(cookies)) { try { wc.BaseAddress = url; wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded"; // Za każdym razem trzeba dodać httpResult = wc.UploadString(uri, myParameters); } catch (WebException) { telemetryThreadStop = true; } catch (Exception ex) { telemetryThreadStop = true; } } cnt++; if (cnt >= 10) // Co dziesiąte wysłanie telemetri wyświetla komunikat { cnt = 0; this.Invoke(new MethodInvoker(delegate() { updateTextBoxTelem(httpResult); })); } if (telemetryThreadStop) { break; // Kończy wątek } } }); if (buttonWysylajTelemetrie.Text == "START Telemetria") { if (myThread.IsAlive == true) { return; } buttonWysylajTelemetrie.Text = "STOP Telemetria"; buttonWysylajTelemetrie.BackColor = Color.Red; telemetryThreadStop = false; myThread.Start(); } else if (buttonWysylajTelemetrie.Text == "STOP Telemetria") { buttonWysylajTelemetrie.Text = "START Telemetria"; buttonWysylajTelemetrie.BackColor = Color.Green; telemetryThreadStop = true; } }
// Wyświetla przeszkody ruchome private void buttonWyswietlPrzeszkodyRuchome_Click(object sender, EventArgs e) // Korzysta z cookies, zapisanych przy logowaniu { Thread myThread = new Thread(() => { Thread.CurrentThread.IsBackground = true; string url = interopURL; string uri = "/api/obstacles"; string httpResult = "Error: Bad URL or not logged in"; while (true) { using (CookieWebClient wc = new CookieWebClient(cookies)) { try { wc.BaseAddress = url; httpResult = wc.DownloadString(uri); // dynamic obstacles = JsonConvert.DeserializeObject(httpResult); // Dane do testów bez konieczności łączenia z serwerem string jsonDataObstacles = "{'stationary_obstacles': [{'latitude': 38.14792, 'cylinder_height': 200.0, 'cylinder_radius': 150.0, 'longitude': -76.427995}, {'latitude': 38.145823, 'cylinder_height': 300.0, 'cylinder_radius': 50.0, 'longitude': -76.422396}], 'moving_obstacles': [{'latitude': 38.14231360808151, 'sphere_radius': 50.0, 'altitude_msl': 269.53771210358616, 'longitude': -76.42518343430758}]}"; dynamic obstacles = JsonConvert.DeserializeObject(jsonDataObstacles); foreach (var movingObstacle in obstacles.moving_obstacles) { double lat = movingObstacle.latitude; double lng = movingObstacle.longitude; double alt = movingObstacle.altitude_msl; double radiusMeters = movingObstacle.sphere_radius; double radius = movingObstacle.sphere_radius / 111200.0; double aspect = 1.271438; // Stosunek 1m szerok. geograf do 1m dł geograficznej List <PointLatLng> gpollist = new List <PointLatLng>(); int segments = 15; double seg = Math.PI * 2 / segments; for (int i = 0; i < segments; i++) { double theta = seg * i; double a = lat + Math.Cos(theta) * radius; double b = lng + Math.Sin(theta) * radius * aspect; PointLatLng gpoi = new PointLatLng(a, b); gpollist.Add(gpoi); } GMapPolygon gpol = new GMapPolygon(gpollist, "pol"); gpol.Fill = new SolidBrush(Color.FromArgb(50, Color.Yellow)); gpol.Stroke = new Pen(Color.Yellow, 1); movingObstaclesOverlay.Polygons.Add(gpol); GMarkerGoogle marker = new GMarkerGoogle(new PointLatLng(lat, lng), GMarkerGoogleType.blue); myMarkersOverlay.Markers.Add(marker); marker.ToolTipMode = MarkerTooltipMode.Always; marker.ToolTip = new GMapRoundedToolTip(marker); marker.ToolTipText = ((int)alt - radiusMeters / 2).ToString() + "-" + ((int)alt + radiusMeters / 2).ToString() + "msl"; } } catch (WebException) { ruchomePrzeszkodyThreadStop = true; } catch (Exception ex) { ruchomePrzeszkodyThreadStop = true; } } if (ruchomePrzeszkodyThreadStop) { break; // Kończy wątek } Thread.Sleep(1000); // Czeka } }); if (buttonWyswietlPrzeszkodyRuchome.Text == "START Ruchome Przeszkody") { if (myThread.IsAlive == true) { return; } buttonWyswietlPrzeszkodyRuchome.Text = "STOP Ruchome Przeszkody"; buttonWyswietlPrzeszkodyRuchome.BackColor = Color.Red; ruchomePrzeszkodyThreadStop = false; myThread.Start(); } else if (buttonWyswietlPrzeszkodyRuchome.Text == "STOP Ruchome Przeszkody") { buttonWyswietlPrzeszkodyRuchome.Text = "START Ruchome Przeszkody"; buttonWyswietlPrzeszkodyRuchome.BackColor = Color.Green; ruchomePrzeszkodyThreadStop = true; } }