Index: lib/src/server.dart |
diff --git a/lib/src/server.dart b/lib/src/server.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6a5c9d78d13ac54510ad933ecc71e86621b15103 |
--- /dev/null |
+++ b/lib/src/server.dart |
@@ -0,0 +1,53 @@ |
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+ |
+library shelf.server; |
+ |
+import 'dart:async'; |
+ |
+import 'handler.dart'; |
+ |
+/// An [adapter][] with a concrete URL. |
+/// |
+/// [adapter]: https://github.com/dart-lang/shelf#adapters |
+/// |
+/// The most basic definiton of "adapter" includes any function that passes |
+/// incoming requests to a [Handler] and passes its responses to some external |
+/// client. However, in practice, most adapters are also *servers*—that is, |
+/// they're serving requests that are made to a certain well-known URL. |
+/// |
+/// This interface represents those servers in a general way. It's useful for |
+/// writing code that needs to know its own URL without tightly coupling that |
+/// code to a single server implementation. |
+/// |
+/// There are two built-in implementations of this interface. You can create a |
+/// server backed by `dart:io` using [IOServer], or you can create a server |
+/// that's backed by a normal [Handler] using [ServerHandler]. |
+/// |
+/// Implementations of this interface are responsible for ensuring that the |
+/// members work as documented. |
+abstract class Server { |
+ /// The URL of the server. |
+ /// |
+ /// Requests to this URL or any URL beneath it are handled by the handler |
+ /// passed to [mount]. If [mount] hasn't yet been called, the requests wait |
+ /// until it is. If [close] has been called, [handler] will not be invoked; |
+ /// otherwise, the behavior is implementation-dependent. |
+ Uri get url; |
+ |
+ /// Mounts [handler] as the base handler for this server. |
+ /// |
+ /// All requests to [url] or and URLs beneath it will be sent to [handler] |
+ /// until [close] is called. |
+ /// |
+ /// Throws a [StateError] if there's already a handler mounted. |
+ void mount(Handler handler); |
+ |
+ /// Closes the server and returns a Future that completes when all resources |
+ /// are released. |
+ /// |
+ /// Once this is called, no more requests will be passed to this server's |
+ /// handler. Otherwise, the cleanup behavior is implementation-dependent. |
+ Future close(); |
+} |