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

Unified Diff: lib/http_multi_server.dart

Issue 1843323002: Fix most strong mode warnings. (Closed) Base URL: git@github.com:dart-lang/http_multi_server@master
Patch Set: Created 4 years, 9 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
« no previous file with comments | « CHANGELOG.md ('k') | lib/src/utils.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/http_multi_server.dart
diff --git a/lib/http_multi_server.dart b/lib/http_multi_server.dart
index 6c4e4685be52108da7aaa1ae43f975994ce62130..18d42cfd3cb2326a65f08d7818005a21d10fa2d0 100644
--- a/lib/http_multi_server.dart
+++ b/lib/http_multi_server.dart
@@ -5,6 +5,8 @@
import 'dart:async';
import 'dart:io';
+import 'package:async/async.dart';
+
import 'src/multi_headers.dart';
import 'src/utils.dart';
@@ -86,7 +88,7 @@ class HttpMultiServer extends StreamView<HttpRequest> implements HttpServer {
: _servers = servers.toSet(),
defaultResponseHeaders = new MultiHeaders(
servers.map((server) => server.defaultResponseHeaders)),
- super(mergeStreams(servers));
+ super(StreamGroup.merge(servers));
/// Creates an [HttpServer] listening on all available loopback addresses for
/// this computer.
@@ -121,36 +123,28 @@ class HttpMultiServer extends StreamView<HttpRequest> implements HttpServer {
/// [HttpServer.bindSecure].
static Future<HttpServer> _loopback(int port,
Future<HttpServer> bind(InternetAddress address, int port),
- [int remainingRetries]) {
+ [int remainingRetries]) async {
if (remainingRetries == null) remainingRetries = 5;
- return Future.wait([
- supportsIpV6,
- bind(InternetAddress.LOOPBACK_IP_V4, port)
- ]).then((results) {
- var supportsIpV6 = results[0];
- var v4Server = results[1];
-
- if (!supportsIpV6) return v4Server;
+ var v4Server = await bind(InternetAddress.LOOPBACK_IP_V4, port);
+ if (!await supportsIpV6) return v4Server;
+ try {
// Reuse the IPv4 server's port so that if [port] is 0, both servers use
// the same ephemeral port.
- return bind(InternetAddress.LOOPBACK_IP_V6, v4Server.port)
- .then((v6Server) {
- return new HttpMultiServer([v4Server, v6Server]);
- }).catchError((error) {
- if (error is! SocketException) throw error;
- if (error.osError.errorCode != _addressInUseErrno) throw error;
- if (port != 0) throw error;
- if (remainingRetries == 0) throw error;
-
- // A port being available on IPv4 doesn't necessarily mean that the same
- // port is available on IPv6. If it's not (which is rare in practice),
- // we try again until we find one that's available on both.
- v4Server.close();
- return _loopback(port, bind, remainingRetries - 1);
- });
- });
+ var v6Server = await bind(InternetAddress.LOOPBACK_IP_V6, v4Server.port);
+ return new HttpMultiServer([v4Server, v6Server]);
+ } on SocketException catch (error) {
+ if (error.osError.errorCode != _addressInUseErrno) rethrow;
+ if (port != 0) rethrow;
+ if (remainingRetries == 0) rethrow;
+
+ // A port being available on IPv4 doesn't necessarily mean that the same
+ // port is available on IPv6. If it's not (which is rare in practice),
+ // we try again until we find one that's available on both.
+ v4Server.close();
+ return await _loopback(port, bind, remainingRetries - 1);
+ }
}
Future close({bool force: false}) =>
« no previous file with comments | « CHANGELOG.md ('k') | lib/src/utils.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698