start_server function
Future<void>
start_server(
{ - int port = 8080,
- void callback(
- Map<String, dynamic> metadata
)?,
})
Implementation
Future<void> start_server({int port = 8080, void Function(Map<String, dynamic> metadata)? callback}) async {
try{
Database db = await _download_data();
List<Map<String, dynamic>> items = await db.query("metadata");
Map<String, dynamic> metadata = <String ,dynamic>{};
for(var item in items){
metadata[item['name']] = item['value'];
}
server = await HttpServer.bind(
InternetAddress.loopbackIPv4,
port,
backlog: 1024,
shared: true
);
if(callback != null){
callback(metadata);
}
await for(HttpRequest request in server){
final paths = request.uri.pathSegments;
if(paths[0] == "tile"){
int z = int.parse(paths[1]);
int x = int.parse(paths[2]);
int y = int.parse(paths[3]);
List<Map<String, dynamic>> rows = await db.query("tiles",
columns:["tile_data"],
where:"zoom_level=$z and tile_column=$x and tile_row=$y");
if(rows.isNotEmpty){
dynamic tileData = rows[0]["tile_data"];
Uint8List bytes = Uint8List.fromList(tileData);
request.response
..headers.contentType = ContentType("image", "png")
..headers.contentLength = bytes.length
..add(bytes)
..close();
continue;
}
}
request.response.write('{"message":"welcome to access","paths":$paths}');
await request.response.close();
}
}catch(err){
print("internal server error:$err");
}
}