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..17b6b0e503206c5c8bb5338e1036de15d8d6dfed 100644 |
--- a/sdk/lib/io/websocket_impl.dart |
+++ b/sdk/lib/io/websocket_impl.dart |
@@ -36,6 +36,11 @@ class _WebSocketOpcode { |
static const int RESERVED_F = 15; |
} |
+class _EncodedString { |
+ final List<int> bytes; |
+ _EncodedString(this.bytes); |
+} |
+ |
/** |
* Stores the header and integer value derived from negotiation of |
* client_max_window_bits and server_max_window_bits. headerValue will be |
@@ -670,13 +675,14 @@ class _WebSocketOutgoingTransformer |
if (message is String) { |
opcode = _WebSocketOpcode.TEXT; |
data = UTF8.encode(message); |
+ } else if (message is List<int>) { |
+ opcode = _WebSocketOpcode.BINARY; |
+ data = message; |
+ } else if (message is _EncodedString) { |
+ opcode = _WebSocketOpcode.TEXT; |
+ data = message.bytes; |
} else { |
- if (message is List<int>) { |
- opcode = _WebSocketOpcode.BINARY; |
- data = message; |
- } else { |
- throw new ArgumentError(message); |
- } |
+ throw new ArgumentError(message); |
} |
if (_deflateHelper != null) { |
@@ -1176,6 +1182,12 @@ class _WebSocketImpl extends Stream with _ServiceObject implements WebSocket { |
String get closeReason => _closeReason; |
void add(data) { _sink.add(data); } |
+ void addUtf8Text(List<int> bytes) { |
+ if (bytes is! List<int>) { |
+ throw new ArgumentError(bytes); |
Lasse Reichstein Nielsen
2016/08/24 20:12:46
throw new ArgumentError.value(bytes, "bytes", "Is
rmacnak
2016/08/24 23:14:43
Done.
|
+ } |
+ _sink.add(new _EncodedString(bytes)); |
+ } |
void addError(error, [StackTrace stackTrace]) { |
_sink.addError(error, stackTrace); |
} |