Remove the RequestHandler interface from the HTTP library

Having the RequestHandler interface did no add anything, so it has
been removed. The HTTP server function addRequestHandler and setter
defaultRequestHandler now just takes function.

To use an instance of a class with a request handler member function
the Dart auto closurerization works fine.

R=ajohnsen@google.com, ager@google.com

BUG=none
TEST=tests/standalone/src/io/HttpServerHandlerTest.dart

Review URL: https://chromiumcodereview.appspot.com//10226002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@6939 260f80e4-7a28-3924-810f-c04153c831b5
This commit is contained in:
sgjesse@google.com 2012-04-25 13:27:14 +00:00
parent df055abd27
commit 11b6d128f1
3 changed files with 31 additions and 43 deletions

View file

@ -52,15 +52,6 @@ interface HttpStatus {
}
/**
* Interface to implement by HTTP request handler classes.
*/
interface RequestHandler {
void onRequest(HttpRequest request, HttpResponse response);
}
/**
* HTTP server.
*/
@ -89,18 +80,20 @@ interface HttpServer default _HttpServer {
* function [matcher] is called with the request and must return
* [:true:] if the [handler] should handle the request. The first
* handler for which [matcher] returns [:true:] will be handed the
* request. The [handler] can be either an object implementing the
* [RequestHandler] interface or a function taking two arguments.
* request.
*/
addRequestHandler(bool matcher(HttpRequest request), Object handler);
addRequestHandler(bool matcher(HttpRequest request),
void handler(HttpRequest request, HttpResponse response));
/**
* Sets the request handler. This request handler will be called if
* none of the request handlers registered by [addRequestHandler]
* matches the current request. If no default request handler is set
* the server will just respond with status code [:NOT_FOUND:] (404).
* Sets the default request handler. This request handler will be
* called if none of the request handlers registered by
* [addRequestHandler] matches the current request. If no default
* request handler is set the server will just respond with status
* code [:NOT_FOUND:] (404).
*/
void set defaultRequestHandler(Object handler);
void set defaultRequestHandler(
void handler(HttpRequest request, HttpResponse response));
/**
* Stop server listening.

View file

@ -822,16 +822,8 @@ class _HttpConnection extends _HttpConnectionBase {
class _RequestHandlerRegistration {
_RequestHandlerRegistration(Function this._matcher, Object this._handler);
_RequestHandlerRegistration(Function this._matcher, Function this._handler);
Function _matcher;
RequestHandler _handler;
}
class _RequestHandlerImpl implements RequestHandler {
_RequestHandlerImpl(Function this._handler);
void onRequest(HttpRequest request, HttpResponse response) =>
_handler(request, response);
Function _handler;
}
@ -866,14 +858,13 @@ class _HttpServer implements HttpServer {
_closeServer = false;
}
addRequestHandler(bool matcher(String path), Object handler) {
if (handler is Function) {
handler = new _RequestHandlerImpl(handler);
}
addRequestHandler(bool matcher(String path),
void handler(HttpRequest request, HttpResponse response)) {
_handlers.add(new _RequestHandlerRegistration(matcher, handler));
}
void set defaultRequestHandler(Object handler) {
void set defaultRequestHandler(
void handler(HttpRequest request, HttpResponse response)) {
_defaultHandler = handler;
}
@ -902,9 +893,9 @@ class _HttpServer implements HttpServer {
void _handleRequest(HttpRequest request, HttpResponse response) {
for (int i = 0; i < _handlers.length; i++) {
if (_handlers[i]._matcher(request)) {
var handler = _handlers[i]._handler;
Function handler = _handlers[i]._handler;
try {
handler.onRequest(request, response);
handler(request, response);
} catch (var e) {
if (_onError != null) {
_onError(e);
@ -915,11 +906,7 @@ class _HttpServer implements HttpServer {
}
if (_defaultHandler != null) {
if (_defaultHandler is Function) {
_defaultHandler(request, response);
} else {
_defaultHandler.onRequest(request, response);
}
_defaultHandler(request, response);
} else {
response.statusCode = HttpStatus.NOT_FOUND;
response.outputStream.close();

View file

@ -6,21 +6,21 @@
#import("dart:io");
#import("dart:isolate");
class Handler1 implements RequestHandler {
class Handler1 {
void onRequest(HttpRequest request, HttpResponse response) {
response.outputStream.writeString("Handler 1");
response.outputStream.close();
}
}
class Handler2 implements RequestHandler {
class Handler2 {
void onRequest(HttpRequest request, HttpResponse response) {
response.outputStream.writeString("Handler 2");
response.outputStream.close();
}
}
class French404Handler implements RequestHandler {
class French404Handler {
void onRequest(HttpRequest request, HttpResponse response) {
response.statusCode = HttpStatus.NOT_FOUND;
response.reasonPhrase = "Non Trouvé";
@ -39,11 +39,19 @@ class Server {
}
void addHandler(Function matcher, handler) {
server.addRequestHandler(matcher, handler);
if (handler is Function) {
server.addRequestHandler(matcher, handler);
} else {
server.addRequestHandler(matcher, handler.onRequest);
}
}
void set defaultHandler(handler) {
server.defaultRequestHandler = handler;
if (handler is Function) {
server.defaultRequestHandler = handler;
} else {
server.defaultRequestHandler = handler.onRequest;
}
}
void close() {