start method
Connect to the specified uri, parses the chunks, and add jpeg frame to stream to view.
Implementation
Future<void> start() async {
if (_controller.isClosed) {
logDebug('Stream controller closed.');
return;
}
/// reset status, and cancel existing subscription
_resetState();
_subscription?.cancel();
logDebug('Starting connection to [$uri].');
try {
final request = Request('GET', Uri.parse(uri));
final response = await _client.send(request).timeout(timeout);
if (response.statusCode >= 200 && response.statusCode < 300) {
logDebug('Connected $uri - (status code: ${response.statusCode})');
_subscription = response.stream.listen(
_handleChunk,
onDone: () {
logDebug('Done received.');
stop(closeController: true);
},
onError: (e, s) {
logDebug('Error received - (error: $e)');
_controller.addError(e, s);
stop(closeController: true);
},
cancelOnError: true, // auto cancel on error
);
} else {
logDebug(
'Connection failed $uri - (status code: ${response.statusCode})',
);
if (!_controller.isClosed) {
final error = Exception(
'Connection failed $uri - (status code: ${response.statusCode})',
);
_controller.addError(error, StackTrace.current);
}
stop(closeController: true);
}
} catch (e, s) {
logDebug('Exception during connection - $e');
if (!_controller.isClosed) {
_controller.addError(e, s);
}
stop(closeController: true);
}
}