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

Side by Side Diff: sdk/lib/_internal/pub_generated/lib/src/barback/admin_server.dart

Issue 896623005: Use native async/await support in pub. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 10 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 library pub.barback.admin_server;
6
7 import 'dart:async';
8 import 'dart:io';
9
10 import 'package:http_parser/http_parser.dart';
11 import 'package:shelf/shelf.dart' as shelf;
12 import 'package:shelf_web_socket/shelf_web_socket.dart';
13
14 import '../io.dart';
15 import '../log.dart' as log;
16 import 'asset_environment.dart';
17 import 'base_server.dart';
18 import 'web_socket_api.dart';
19
20 /// The web admin interface to pub serve.
21 // TODO(rnystrom): Currently this just provides access to the Web Socket API.
22 // See #16954.
23 class AdminServer extends BaseServer {
24 /// All currently open [WebSocket] connections.
25 final _webSockets = new Set<CompatibleWebSocket>();
26
27 shelf.Handler _handler;
28
29 /// Creates a new server and binds it to [port] of [host].
30 static Future<AdminServer> bind(AssetEnvironment environment, String host,
31 int port) {
32 return bindServer(host, port).then((server) {
33 log.fine('Bound admin server to $host:$port.');
34 return new AdminServer._(environment, server);
35 });
36 }
37
38 AdminServer._(AssetEnvironment environment, HttpServer server)
39 : super(environment, server) {
40 _handler = new shelf.Cascade().add(
41 webSocketHandler(_handleWebSocket)).add(_handleHttp).handler;
42 }
43
44 /// Closes the server and all Web Socket connections.
45 Future close() {
46 var futures = [super.close()];
47 futures.addAll(_webSockets.map((socket) => socket.close()));
48 return Future.wait(futures);
49 }
50
51 handleRequest(shelf.Request request) => _handler(request);
52
53 /// Handles an HTTP request.
54 _handleHttp(shelf.Request request) {
55 // TODO(rnystrom): Actually respond to requests once there is an admin
56 // interface. See #16954.
57 logRequest(request, "501 Not Implemented");
58 return new shelf.Response(
59 501,
60 body: "Currently this server only accepts Web Socket connections.");
61 }
62
63 /// Creates a web socket for [request] which should be an upgrade request.
64 void _handleWebSocket(CompatibleWebSocket socket) {
65 _webSockets.add(socket);
66 var api = new WebSocketApi(socket, environment);
67 api.listen().whenComplete(
68 () => _webSockets.remove(api)).catchError(addError);
69 }
70 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698