Skip to content
Snippets Groups Projects
Commit cbb1b7a2 authored by Maximilian Betz's avatar Maximilian Betz
Browse files

started moving the sensor communication to separate dart file

parent 546cec09
No related branches found
No related tags found
No related merge requests found
......@@ -4,6 +4,7 @@ import 'package:flutter/services.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
import 'datamodel.dart';
import 'sensorconnector.dart';
Future<int> login() async {
// Get Access to local configuration store. Token must be stored there!
......@@ -151,11 +152,14 @@ class _MyHomePageState extends State<Configuration> {
late Future<Collection> futureCollection;
late Future<List<Collection>> futureCollections;
late Future<List<EventType>> futureEventTypes;
SensorConnector connector = SensorConnector();
@override
void initState() {
super.initState();
futureCollections = fetchCollections();
futureCollections = connector.fetchCollections();
futureEventTypes = connector.fetchEventTypes();
fetchEventTypes();
}
late Future<String> eventTypes;
......
import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:http/http.dart' as http;
import 'datamodel.dart';
class SensorConnector {
final String baseUrl = 'https://sandbox.sensor.awi.de/rest/';
final String loginUrl = 'sensors/contacts/login';
final String collectionsUrl = 'sensors/collections/getAllCollections?pointInTime=2018-07-03T12%3A30%3A55.389Z';
final String eventTypesUrl = 'sensors/events/getAllEventTypes';
final String collectionItemsUrl = 'sensors/collections/getItemsOfCollection/'; // + collectionId
final String putEventUrl = 'sensors/events/putEvent/'; // + eventId;
Future<String> getAuthToken(String username, String password) async {
String url = baseUrl + loginUrl;
String? token;
Map<String, dynamic> body = {
'username': username,
'authPassword': password
};
String encodedBody = body.keys.map((key) => "$key=${body[key]}").join("&");
final response = await http.post(Uri.parse(url),
body: encodedBody,
headers: {
'Accept': 'application/json',
'Content-Type': 'application/x-www-form-urlencoded'
},
encoding: Encoding.getByName("utf-8")
);
if (response.statusCode == 200) {
token = response.headers['set-cookie']?.split(';')[0];
debugPrint('Login success. Token: ' + token!.toString());
} else {
throw Exception('Failed to login. '
'Header: ' + response.headers.toString() +
' StatusCode: ' +response.statusCode.toString() +
' Body: ' +response.body.toString());
}
return token;
}
Future<List<Collection>> fetchCollections() async {
String url = baseUrl + collectionsUrl;
List<Collection> collectionList = [];
final response = await http.get(Uri.parse(url));
if (response.statusCode == 200) {
collectionList = (json.decode(response.body) as List)
.map((i) => Collection.fromJson(i))
.toList();
debugPrint("Fetching Collections Success: " + collectionList.toString());
} else {
throw Exception('Failed to fetch Collections. '
'Header: ' + response.headers.toString() +
' StatusCode: ' +response.statusCode.toString() +
' Body: ' +response.body.toString());
}
return collectionList;
}
Future<List<EventType>> fetchEventTypes() async {
String url = baseUrl + eventTypesUrl;
List<EventType> eventTypeList = [];
final response = await http.get(Uri.parse(url));
if (response.statusCode == 200) {
eventTypeList = (json.decode(response.body) as List)
.map((i) => EventType.fromJson(i))
.toList();
debugPrint("Fetching Event Types Success: " + eventTypeList.toString());
} else{
throw Exception('Failed to fetch event types. '
'Header: ' + response.headers.toString() +
' StatusCode: ' +response.statusCode.toString() +
' Body: ' +response.body.toString());
}
return eventTypeList;
}
Future<List<Device>> updateDevices(int collectionId) async {
String url = baseUrl + collectionItemsUrl + collectionId.toString();
List<Device> collectionDevices = [];
final response = await http.get(Uri.parse(url));
if (response.statusCode == 200) {
List<dynamic> data = json.decode(response.body);
for (var entry in data) {
collectionDevices.add(Device.fromJson(entry));
}
debugPrint("Fetching Collection Devices Success: " + collectionDevices.toString());
} else {
throw Exception('Failed to load Collection Devices. '
'Header: ' + response.headers.toString() +
' StatusCode: ' +response.statusCode.toString() +
' Body: ' +response.body.toString());
}
return collectionDevices;
}
Future<bool> putEvent(Event event, String authToken) async {
// Create url with corresponding device id:
String url = baseUrl + putEventUrl + event.id.toString() + '?createVersion=false';
final response = await http.put(Uri.parse(url),
headers: {
"Content-Type": "application/json",
"Cookie": authToken
},
body: event.toSensorJson().toString(),
encoding: Encoding.getByName("utf-8"),
);
if (response.statusCode == 201) {
event.status = 'EXPORTED'; //Update the event status so that it is only exported once.
return true;
} else {
throw Exception('Failed to put event. '
'Header: ' + response.headers.toString() +
' StatusCode: ' +response.statusCode.toString() +
' Body: ' +response.body.toString());
return false;
}
}
}
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