| Index: sdk/lib/io/websocket_impl.dart
|
| diff --git a/sdk/lib/io/websocket_impl.dart b/sdk/lib/io/websocket_impl.dart
|
| index d593b58558962d77187f304a90e267c8c2674921..18d1cf22bc2407a2bce1ea4461cc9431ddebe43d 100644
|
| --- a/sdk/lib/io/websocket_impl.dart
|
| +++ b/sdk/lib/io/websocket_impl.dart
|
| @@ -50,7 +50,7 @@ class _CompressionMaxWindowBits {
|
|
|
| /**
|
| * The web socket protocol transformer handles the protocol byte stream
|
| - * which is supplied through the `handleData`. As the protocol is processed,
|
| + * which is supplied through the [:handleData:]. As the protocol is processed,
|
| * it'll output frame data as either a List<int> or String.
|
| *
|
| * Important information about usage: Be sure you use cancelOnError, so the
|
| @@ -59,8 +59,7 @@ class _CompressionMaxWindowBits {
|
| */
|
| // TODO(ajohnsen): make this transformer reusable?
|
| class _WebSocketProtocolTransformer
|
| - implements EventSink<List<int>>, StreamTransformer<
|
| - List<int>, dynamic/*List<int>|_WebSocketPing|_WebSocketPong>*/> {
|
| + implements StreamTransformer<List<int>, dynamic>, EventSink<Uint8List> {
|
| static const int START = 0;
|
| static const int LEN_FIRST = 1;
|
| static const int LEN_REST = 2;
|
| @@ -88,7 +87,7 @@ class _WebSocketProtocolTransformer
|
| int closeCode = WebSocketStatus.NO_STATUS_RECEIVED;
|
| String closeReason = "";
|
|
|
| - EventSink<dynamic/*List<int>|_WebSocketPing|_WebSocketPong>*/> _eventSink;
|
| + EventSink _eventSink;
|
|
|
| final bool _serverSide;
|
| final List _maskingBytes = new List(4);
|
| @@ -97,8 +96,7 @@ class _WebSocketProtocolTransformer
|
| _WebSocketPerMessageDeflate _deflate;
|
| _WebSocketProtocolTransformer([this._serverSide = false, this._deflate]);
|
|
|
| - Stream<dynamic/*List<int>|_WebSocketPing|_WebSocketPong>*/> bind(
|
| - Stream<List<int>> stream) {
|
| + Stream bind(Stream stream) {
|
| return new Stream.eventTransformed(stream, (EventSink eventSink) {
|
| if (_eventSink != null) {
|
| throw new StateError("WebSocket transformer already used.");
|
| @@ -396,12 +394,10 @@ class _WebSocketPong {
|
| _WebSocketPong([this.payload = null]);
|
| }
|
|
|
| -typedef /*String|Future<String>*/ _ProtocolSelector(List<String> protocols);
|
| -
|
| class _WebSocketTransformerImpl implements WebSocketTransformer {
|
| final StreamController<WebSocket> _controller =
|
| new StreamController<WebSocket>(sync: true);
|
| - final _ProtocolSelector _protocolSelector;
|
| + final Function _protocolSelector;
|
| final CompressionOptions _compression;
|
|
|
| _WebSocketTransformerImpl(this._protocolSelector, this._compression);
|
| @@ -418,8 +414,8 @@ class _WebSocketTransformerImpl implements WebSocketTransformer {
|
| return _controller.stream;
|
| }
|
|
|
| - static Future<WebSocket> _upgrade(HttpRequest request,
|
| - _ProtocolSelector _protocolSelector, CompressionOptions compression) {
|
| + static Future<WebSocket> _upgrade(
|
| + HttpRequest request, _protocolSelector, CompressionOptions compression) {
|
| var response = request.response;
|
| if (!_isUpgradeRequest(request)) {
|
| // Send error response.
|
| @@ -430,7 +426,7 @@ class _WebSocketTransformerImpl implements WebSocketTransformer {
|
| new WebSocketException("Invalid WebSocket upgrade request"));
|
| }
|
|
|
| - Future<WebSocket> upgrade(String protocol) {
|
| + Future upgrade(String protocol) {
|
| // Send the upgrade response.
|
| response
|
| ..statusCode = HttpStatus.SWITCHING_PROTOCOLS
|
| @@ -448,7 +444,7 @@ class _WebSocketTransformerImpl implements WebSocketTransformer {
|
| var deflate = _negotiateCompression(request, response, compression);
|
|
|
| response.headers.contentLength = 0;
|
| - return response.detachSocket().then/*<WebSocket>*/((socket) =>
|
| + return response.detachSocket().then((socket) =>
|
| new _WebSocketImpl._fromSocket(
|
| socket, protocol, compression, true, deflate));
|
| }
|
| @@ -459,8 +455,7 @@ class _WebSocketTransformerImpl implements WebSocketTransformer {
|
| // consisting of multiple protocols. To unify all of them, first join
|
| // the lists with ', ' and then tokenize.
|
| protocols = _HttpParser._tokenizeFieldValue(protocols.join(', '));
|
| - return new Future<String>(() => _protocolSelector(protocols))
|
| - .then/*<String>*/((protocol) {
|
| + return new Future(() => _protocolSelector(protocols)).then((protocol) {
|
| if (protocols.indexOf(protocol) < 0) {
|
| throw new WebSocketException(
|
| "Selected protocol is not in the list of available protocols");
|
| @@ -471,7 +466,7 @@ class _WebSocketTransformerImpl implements WebSocketTransformer {
|
| ..statusCode = HttpStatus.INTERNAL_SERVER_ERROR
|
| ..close();
|
| throw error;
|
| - }).then/*<WebSocket>*/(upgrade);
|
| + }).then(upgrade);
|
| } else {
|
| return upgrade(null);
|
| }
|
| @@ -575,13 +570,13 @@ class _WebSocketPerMessageDeflate {
|
| Uint8List processIncomingMessage(List<int> msg) {
|
| _ensureDecoder();
|
|
|
| - var data = <int>[];
|
| + var data = [];
|
| data.addAll(msg);
|
| data.addAll(const [0x00, 0x00, 0xff, 0xff]);
|
|
|
| decoder.process(data, 0, data.length);
|
| - var result = <int>[];
|
| - List<int> out;
|
| + var result = [];
|
| + var out;
|
|
|
| while ((out = decoder.processed()) != null) {
|
| result.addAll(out);
|
| @@ -597,8 +592,9 @@ class _WebSocketPerMessageDeflate {
|
|
|
| List<int> processOutgoingMessage(List<int> msg) {
|
| _ensureEncoder();
|
| - var result = <int>[];
|
| + var result = [];
|
| Uint8List buffer;
|
| + var out;
|
|
|
| if (msg is! Uint8List) {
|
| for (var i = 0; i < msg.length; i++) {
|
| @@ -614,7 +610,6 @@ class _WebSocketPerMessageDeflate {
|
|
|
| encoder.process(buffer, 0, buffer.length);
|
|
|
| - List<int> out;
|
| while ((out = encoder.processed()) != null) {
|
| result.addAll(out);
|
| }
|
| @@ -645,8 +640,7 @@ class _WebSocketOutgoingTransformer
|
| }
|
|
|
| Stream<List<int>> bind(Stream stream) {
|
| - return new Stream<List<int>>.eventTransformed(
|
| - stream, (EventSink<List<int>> eventSink) {
|
| + return new Stream.eventTransformed(stream, (eventSink) {
|
| if (_eventSink != null) {
|
| throw new StateError("WebSocket transformer already used");
|
| }
|
| @@ -672,8 +666,8 @@ class _WebSocketOutgoingTransformer
|
| data = UTF8.encode(message);
|
| } else {
|
| if (message is List<int>) {
|
| - opcode = _WebSocketOpcode.BINARY;
|
| data = message;
|
| + opcode = _WebSocketOpcode.BINARY;
|
| } else {
|
| throw new ArgumentError(message);
|
| }
|
| @@ -708,16 +702,15 @@ class _WebSocketOutgoingTransformer
|
| _eventSink.close();
|
| }
|
|
|
| - void addFrame(int opcode, List<int> data) {
|
| - createFrame(
|
| - opcode,
|
| - data,
|
| - webSocket._serverSide,
|
| - _deflateHelper != null &&
|
| - (opcode == _WebSocketOpcode.TEXT ||
|
| - opcode == _WebSocketOpcode.BINARY))
|
| - .forEach((e) { _eventSink.add(e); });
|
| - }
|
| + void addFrame(int opcode, List<int> data) => createFrame(
|
| + opcode,
|
| + data,
|
| + webSocket._serverSide,
|
| + _deflateHelper != null &&
|
| + (opcode == _WebSocketOpcode.TEXT ||
|
| + opcode == _WebSocketOpcode.BINARY)).forEach((e) {
|
| + _eventSink.add(e);
|
| + });
|
|
|
| static Iterable<List<int>> createFrame(
|
| int opcode, List<int> data, bool serverSide, bool compressed) {
|
|
|