Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(289)

Unified Diff: sdk/lib/_internal/pub/lib/src/barback/admin_server.dart

Issue 298683003: Use shelf in pub's barback and admin servers. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: code review Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: sdk/lib/_internal/pub/lib/src/barback/admin_server.dart
diff --git a/sdk/lib/_internal/pub/lib/src/barback/admin_server.dart b/sdk/lib/_internal/pub/lib/src/barback/admin_server.dart
index f31d4d2ceb9959eee2f93931de2f51dcb5c637a1..80603b1b22049e9cd8ac96562c9bfe3fc90c6bbd 100644
--- a/sdk/lib/_internal/pub/lib/src/barback/admin_server.dart
+++ b/sdk/lib/_internal/pub/lib/src/barback/admin_server.dart
@@ -7,6 +7,9 @@ library pub.barback.admin_server;
import 'dart:async';
import 'dart:io';
+import 'package:http_parser/http_parser.dart';
+import 'package:shelf/shelf.dart' as shelf;
+import 'package:shelf_web_socket/shelf_web_socket.dart';
import 'package:stack_trace/stack_trace.dart';
import '../log.dart' as log;
@@ -19,7 +22,9 @@ import 'web_socket_api.dart';
// See #16954.
class AdminServer extends BaseServer {
/// All currently open [WebSocket] connections.
- final _webSockets = new Set<WebSocket>();
+ final _webSockets = new Set<CompatibleWebSocket>();
+
+ shelf.Handler _handler;
/// Creates a new server and binds it to [port] of [host].
static Future<AdminServer> bind(AssetEnvironment environment,
@@ -31,7 +36,11 @@ class AdminServer extends BaseServer {
}
AdminServer._(AssetEnvironment environment, HttpServer server)
- : super(environment, server);
+ : super(environment, server) {
+ _handler = new shelf.Cascade()
+ .add(webSocketHandler(_handleWebSocket))
+ .add(_handleHttp).handler;
+ }
/// Closes the server and all Web Socket connections.
Future close() {
@@ -40,33 +49,23 @@ class AdminServer extends BaseServer {
return Future.wait(futures);
}
- /// Handles an HTTP request.
- void handleRequest(HttpRequest request) {
- if (WebSocketTransformer.isUpgradeRequest(request)) {
- _handleWebSocket(request);
- return;
- }
+ handleRequest(shelf.Request request) => _handler(request);
+ /// Handles an HTTP request.
+ _handleHttp(shelf.Request request) {
// TODO(rnystrom): Actually respond to requests once there is an admin
// interface. See #16954.
logRequest(request, "501 Not Implemented");
- request.response.headers.contentType =
- ContentType.parse("text/plain; charset=utf-8");
-
- request.response.statusCode = 501;
- request.response.reasonPhrase = "Not Implemented";
- request.response.write(
- "Currently this server only accepts Web Socket connections.");
- request.response.close();
+ return new shelf.Response(501,
+ body: "Currently this server only accepts Web Socket connections.");
}
/// Creates a web socket for [request] which should be an upgrade request.
- void _handleWebSocket(HttpRequest request) {
- Chain.track(WebSocketTransformer.upgrade(request)).then((socket) {
- _webSockets.add(socket);
- var api = new WebSocketApi(socket, environment);
-
- return api.listen().whenComplete(() => _webSockets.remove(api));
- }).catchError(addError);
+ void _handleWebSocket(CompatibleWebSocket socket) {
+ _webSockets.add(socket);
+ var api = new WebSocketApi(socket, environment);
+ api.listen()
+ .whenComplete(() => _webSockets.remove(api))
+ .catchError(addError);
}
}
« no previous file with comments | « sdk/lib/_internal/pub/asset/dart/serialize/transformer.dart ('k') | sdk/lib/_internal/pub/lib/src/barback/barback_server.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698