| 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..d255d7bde63863c1217b8d591d75d47eeee2c175 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) {
|
| @@ -1175,6 +1181,22 @@ class _WebSocketImpl extends Stream with _ServiceObject implements WebSocket {
|
| int get closeCode => _closeCode;
|
| String get closeReason => _closeReason;
|
|
|
| + void sendMessage(WebSocketMessageType type, List<int> bytes) {
|
| + if (bytes is! List<int>) {
|
| + throw new ArgumentError(bytes);
|
| + }
|
| + switch (type) {
|
| + case WebSocketMessageType.BINARY:
|
| + add(bytes);
|
| + break;
|
| + case WebSocketMessageType.TEXT:
|
| + add(new _EncodedString(bytes));
|
| + break;
|
| + default:
|
| + throw new ArgumentError(type);
|
| + }
|
| + }
|
| +
|
| void add(data) { _sink.add(data); }
|
| void addError(error, [StackTrace stackTrace]) {
|
| _sink.addError(error, stackTrace);
|
|
|