handle method
Handles one already-bounded platform-neutral HTTP request.
Implementation
Future<AcpHttpResponse> handle(AcpHttpRequest request) async {
if (_isClosed) {
return _text('ACP server is closed', 503);
}
final AcpHttpRequestPolicy? policy = _requestPolicy;
if (policy != null) {
final Future<bool> decision = Future<bool>.sync(() => policy(request));
decision.ignore();
try {
final bool allowed = await _raceCancellation(
decision,
request.cancellationToken,
).timeout(_limits.initializeTimeout);
if (!allowed) {
return _text('Forbidden', 403);
}
} on _RequestAborted {
return _text('Request aborted', 499);
} on Object {
return _text('Forbidden', 403);
}
}
if (_isClosed) {
return _text('ACP server is closed', 503);
}
return switch (request.method.toUpperCase()) {
'POST' => _handlePost(request),
'GET' => _handleGet(request),
'DELETE' => _handleDelete(request),
_ => _text('Method Not Allowed', 405),
};
}