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

Unified Diff: sdk/lib/io/websocket.dart

Issue 12316036: Merge IO v2 branch to bleeding edge (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Rebased to r18818 Created 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sdk/lib/io/string_stream.dart ('k') | sdk/lib/io/websocket_impl.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sdk/lib/io/websocket.dart
diff --git a/sdk/lib/io/websocket.dart b/sdk/lib/io/websocket.dart
index 9ded504337e714855399cc17eaf1bc798ef645c5..48cf54af42d48bda19a3d902ae5ff4358ed378ef 100644
--- a/sdk/lib/io/websocket.dart
+++ b/sdk/lib/io/websocket.dart
@@ -24,145 +24,25 @@ abstract class WebSocketStatus {
}
/**
- * The web socket protocol is implemented by a HTTP or HTTPS server handler
- * which can be instantiated like this:
+ * The [WebSocketTransformer] is implemented as a stream transformer that
+ * transforms a stream of HttpRequest into a stream of WebSockets by upgrading
+ * each HttpRequest from the HTTP or HTTPS server, to the WebSocket protocol.
*
- * WebSocketHandler wsHandler = new WebSocketHandler();
+ * Example of usage:
*
- * and then its onRequest method can be assigned to the HTTP server, e.g.
- *
- * server.defaultHandler = wsHandler.onRequest;
+ * server.transform(new WebSocketTransformer()).listen((webSocket) => ...);
*
* or
*
- * server.addRequestHandler((req) => req.path == "/ws",
- * wsHandler.onRequest);
+ * server
+ * .where((request) => request.uri.scheme == "ws")
+ * .transform(new WebSocketTransformer()).listen((webSocket) => ...);
*
- * This handler strives to implement web sockets as specified by RFC6455.
+ * This transformer strives to implement web sockets as specified by RFC6455.
*/
-abstract class WebSocketHandler {
- factory WebSocketHandler() => new _WebSocketHandler();
-
- /**
- * Request handler to be registered with the HTTP server.
- */
- void onRequest(HttpRequest request, HttpResponse response);
-
- /**
- * Sets the callback to be called when a new web socket connection
- * has been established.
- */
- void set onOpen(callback(WebSocketConnection connection));
-}
-
-
-/**
- * Server web socket connection.
- */
-abstract class WebSocketConnection {
- /**
- * Sets the callback to be called when a message has been
- * received. The type on [message] is either [:String:] or
- * [:List<int>:] depending on whether it is a text or binary
- * message. If the message is empty [message] will be [:null:].
- * If [message] is a [:List<int>:] then it will contain byte values
- * from 0 to 255.
- */
- void set onMessage(void callback(message));
-
- /**
- * Sets the callback to be called when the web socket connection is
- * closed. [status] indicate the reason for closing. For network
- * errors the value of [status] will be
- * WebSocketStatus.ABNORMAL_CLOSURE]. In this callback it is
- * possible to call [close] if [close] has not already been called.
- * If [close] has still not been called after the close callback
- * returns the received close status will automatically be echoed
- * back to the other end to finish the close handshake.
- */
- void set onClosed(void callback(int status, String reason));
-
- /**
- * Sends a message. The [message] must be a [:String:], a
- * [:List<int>:] containing bytes, or [:null:].
- */
- send(Object message);
-
- /**
- * Close the web socket connection. The default value for [status]
- * and [reason] are [:null:].
- */
- close([int status, String reason]);
-}
-
-
-/**
- * Client web socket connection.
- */
-abstract class WebSocketClientConnection {
- /**
- * Creates a new web socket client connection based on a HTTP(S) client
- * connection. The HTTP or HTTPS client connection must be freshly opened.
- */
- factory WebSocketClientConnection(HttpClientConnection conn,
- [List<String> protocols]) {
- return new _WebSocketClientConnection(conn, protocols);
- }
-
- /**
- * Sets the callback to be called when the request object for the
- * opening handshake request is ready. This callback can be used if
- * one needs to add additional headers to the opening handshake
- * request.
- */
- void set onRequest(void callback(HttpClientRequest request));
-
- /**
- * Sets the callback to be called when a web socket connection has
- * been established.
- */
- void set onOpen(void callback());
-
- /**
- * Sets the callback to be called when a message has been
- * received. The type of [message] is either [:String:] or
- * [:List<int>:], depending on whether it is a text or binary
- * message. If the message is empty [message] will be [:null:].
- * If the message is a [:List<int>:] then it will contain byte values
- * from 0 to 255.
- */
- void set onMessage(void callback(message));
-
- /**
- * Sets the callback to be called when the web socket connection is
- * closed. [status] indicates the reason for closing. For network
- * errors the value of [status] will be
- * WebSocketStatus.ABNORMAL_CLOSURE].
- */
- void set onClosed(void callback(int status, String reason));
-
- /**
- * Sets the callback to be called when the response object for the
- * opening handshake did not cause a web socket connection
- * upgrade. This will be called in case the response status code is
- * not 101 (Switching Protocols). If this callback is not set and the
- * server does not upgrade the connection, the [:onError:] callback will
- * be called.
- */
- void set onNoUpgrade(void callback(HttpClientResponse response));
-
- /**
- * Sends a message. The [message] must be a [:String:] or a
- * [:List<int>:] containing bytes. To send an empty message send either
- * an empty [:String:] or an empty [:List<int>:]. [:null:] cannot be sent.
- */
- send(message);
-
- /**
- * Close the web socket connection. The default value for [status]
- * and [reason] are [:null:].
- */
- close([int status, String reason]);
+abstract class WebSocketTransformer
+ implements StreamTransformer<HttpRequest, WebSocket> {
+ factory WebSocketTransformer() => new _WebSocketTransformerImpl();
}
@@ -182,7 +62,6 @@ abstract class MessageEvent extends Event {
* message is empty [message] will be [:null:]
* If the message is a [:List<int>:] then it will contain byte values
* from 0 to 255.
-
*/
get data;
}
@@ -216,7 +95,7 @@ abstract class CloseEvent extends Event {
* with the W3C browser API for web sockets specified in
* http://dev.w3.org/html5/websockets/.
*/
-abstract class WebSocket {
+abstract class WebSocket implements Stream<Event> {
/**
* Possible states of the connection.
*/
@@ -227,11 +106,12 @@ abstract class WebSocket {
/**
* Create a new web socket connection. The URL supplied in [url]
- * must use the scheme [:ws:]. The [protocols] argument is either a
- * [:String:] or [:List<String>:] specifying the subprotocols the
+ * must use the scheme [:ws:] or [:wss:]. The [protocols] argument is either
+ * a [:String:] or [:List<String>:] specifying the subprotocols the
* client is willing to speak.
*/
- factory WebSocket(String url, [protocols]) => new _WebSocket(url, protocols);
+ static Future<WebSocket> connect(String url, [protocols]) =>
+ _WebSocketImpl.connect(url, protocols);
/**
* Returns the current state of the connection.
@@ -244,24 +124,6 @@ abstract class WebSocket {
int get bufferedAmount;
/**
- * Sets the callback to be called when a web socket connection has
- * been established.
- */
- void set onopen(void callback());
-
- /**
- * Sets the callback to be called when the web socket connection
- * encountered an error.
- */
- void set onerror(void callback(e));
-
- /**
- * Sets the callback to be called when the web socket connection is
- * closed.
- */
- void set onclose(void callback(CloseEvent event));
-
- /**
* The extensions property is initially the empty string. After the
* web socket connection is established this string reflects the
* extensions used by the server.
@@ -279,13 +141,7 @@ abstract class WebSocket {
/**
* Closes the web socket connection.
*/
- void close(int code, String reason);
-
- /**
- * Sets the callback to be called when a message has been
- * received.
- */
- void set onmessage(void callback(MessageEvent event));
+ void close([int code, String reason]);
/**
* Sends data on the web socket connection. The data in [data] must
« no previous file with comments | « sdk/lib/io/string_stream.dart ('k') | sdk/lib/io/websocket_impl.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698