Skip to content
Snippets Groups Projects
Commit cd048603 authored by Sara Savanovic Djordjevic's avatar Sara Savanovic Djordjevic
Browse files

fix: update_map endpoint

parent 9300a5ce
No related branches found
No related tags found
1 merge request!1Server
import 'dart:js_interop';
import 'package:flutter/material.dart';
import 'package:flutter_map/flutter_map.dart';
import 'package:latlong2/latlong.dart'; // Import LatLng class from the latlong package
import 'dart:async';
import 'dart:io';
import 'dart:convert';
const String port = "8443";
......@@ -27,23 +30,6 @@ class App extends StatelessWidget {
}
}
// fetchData requests data from the update_map endpoint
Future<void> fetchData() async {
try {
// Custom HTTP client
HttpClient client = HttpClient()
..badCertificateCallback = // NB: temporary disable SSL certificate validation
(X509Certificate cert, String host, int port) => true;
var request = await client.getUrl(Uri.parse(serverURI+mapEndpoint));
var response = await request.close();
print('Response status: ${response.statusCode}');
} catch (e) {
print('Failed to connect to the server: $e');
}
}
class DefaultPage extends StatefulWidget {
const DefaultPage({Key? key}) : super(key: key);
......@@ -59,26 +45,68 @@ class MarkerData {
MarkerData({required this.location, required this.size, required this.color});
}
// parseMarkerData parses jsonData into an object of type MakerData
List<MarkerData> parseMarkerData(String jsonString) {
final parsed = json.decode(jsonString);
return List<MarkerData>.from(parsed.map((data) => MarkerData(
location: LatLng(data['latitude'], data['longitude']),
size: data['size'].toDouble(),
color: parseColor(data['color']),
)));
}
Color parseColor(String colorString) {
switch (colorString) {
case 'blue':
return Colors.blue;
case 'red':
return Colors.red;
case 'green':
return Colors.green;
default:
return Colors.black; // Default color if unrecognized
}
}
class _DefaultPageState extends State<DefaultPage> {
late Timer _timer;
final List<MarkerData> markerList = [
MarkerData(location: LatLng(60.7266, 10.9771), size: 50.0, color: Colors.blue),
MarkerData(location: LatLng(60.8366, 10.8171), size: 70.0, color: Colors.red),
MarkerData(location: LatLng(60.7366, 10.8471), size: 60.0, color: Colors.green),
];
List<MarkerData> markerList = [];
// fetchMarkerData requests data from the update_map endpoint
Future<void> fetchMarkerData() async {
try {
// Custom HTTP client
HttpClient client = HttpClient()
..badCertificateCallback = // NB: temporary disable SSL certificate validation
(X509Certificate cert, String host, int port) => true;
var request = await client.getUrl(Uri.parse(serverURI+mapEndpoint));
var response = await request.close();
// Parse json response to list of MarkerData objects if request is ok
if (response.statusCode == 200) {
var responseBody = await response.transform(utf8.decoder).join();
markerList = parseMarkerData(responseBody);
} else {
print('Request failed with status: ${response.statusCode}');
}
} catch (e) {
print('Failed to connect to the server: $e');
}
}
// Timer initializer
@override
void initState() {
super.initState();
// Call fetchData when the widget is first created
fetchData();
// Call fetchMarkerData when the widget is first created
fetchMarkerData();
// Schedule fetchData to run periodically based on fetchInterval const
// Schedule fetchMarkerData to run periodically based on fetchInterval const
const Duration fiveMinutes = Duration(minutes: fetchInterval);
_timer = Timer.periodic(fiveMinutes, (timer) {
fetchData();
fetchMarkerData();
});
}
......
No preview for this file type
No preview for this file type
......@@ -21,9 +21,17 @@ class DataPoint:
self.accuracy = accuracy
# Template for map marker data
class MarkerTemplate:
def __init__(self, longitude, latitude, size, color):
self.longitude = longitude
def __init__(self, latitude, longitude, size, color):
self.latitude = latitude
self.longitude = longitude
self.size = size
self.color = color
\ No newline at end of file
self.color = color
def to_dict(self):
return {
'latitude': self.latitude,
'longitude': self.longitude,
'size': self.size,
'color': self.color
}
\ No newline at end of file
......@@ -3,8 +3,7 @@ from http.server import HTTPServer, BaseHTTPRequestHandler
from pymongo import MongoClient
from pymongo.server_api import ServerApi
from consts import DB_NAME, COLLECTION, MONGO_URI, MONGO_CERT_PATH, SSL_CERT_PATH, SSL_KEY_PATH, HOST, PORT
from map.extract_coordinates import extract_coordinates
from data_structs import DataPoint
from map.get_markers import get_markers
import atexit
import ssl
......@@ -32,16 +31,14 @@ class IceHTTP(BaseHTTPRequestHandler):
self.end_headers()
self.wfile.write(b"Root path hit!")
elif self.path == '/update_map':
# Get response from process_data_point
response, status_code = extract_coordinates()
# Send the response
self.send_response(status_code)
# Send the response with a status code (e.g., 200 for success)
self.send_response(200)
self.send_header("Content-type", "application/json")
self.end_headers()
# Write response data to the response
self.wfile.write(response.get_data())
# Write the JSON data directly to the response
markers_data = get_markers()
self.wfile.write(markers_data.encode('utf-8'))
elif self.path == '/test_endpoint':
self.send_response(200)
......
File added
import os
import sys
current_dir = os.path.dirname(__file__)
parent_dir = os.path.abspath(os.path.join(current_dir, '..'))
sys.path.append(parent_dir)
from data_structs import MarkerTemplate
from flask import json
def get_markers():
testData = [
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment