onRequest method
Handles chopper request and creates alice http call
Implementation
@override
FutureOr<chopper.Request> onRequest(chopper.Request request) async {
try {
final headers = request.headers;
headers['alice_token'] = DateTime.now().millisecondsSinceEpoch.toString();
final changedRequest = request.copyWith(headers: headers);
final baseRequest = await changedRequest.toBaseRequest();
final call = AliceHttpCall(getRequestHashCode(baseRequest));
var endpoint = '';
var server = '';
final split = request.url.toString().split('/');
if (split.length > 2) {
server = split[1] + split[2];
}
if (split.length > 4) {
endpoint = '/';
for (var splitIndex = 3; splitIndex < split.length; splitIndex++) {
// ignore: use_string_buffers
endpoint += '${split[splitIndex]}/';
}
endpoint = endpoint.substring(0, endpoint.length - 1);
}
call
..method = request.method
..endpoint = endpoint
..server = server
..client = 'Chopper';
if (request.url.toString().contains('https')) {
call.secure = true;
}
final aliceHttpRequest = AliceHttpRequest();
if (request.body == null) {
aliceHttpRequest
..size = 0
..body = '';
} else {
aliceHttpRequest
..size = utf8.encode(request.body as String).length
..body = request.body;
}
aliceHttpRequest
..time = DateTime.now()
..headers = request.headers;
String? contentType = 'unknown';
if (request.headers.containsKey('Content-Type')) {
contentType = request.headers['Content-Type'];
}
aliceHttpRequest
..contentType = contentType
..queryParameters = request.parameters;
call
..request = aliceHttpRequest
..response = AliceHttpResponse();
aliceCore.addCall(call);
} catch (exception) {
AliceUtils.log(exception.toString());
}
return request;
}