| Index: runtime/bin/vmservice/client/lib/service_io.dart | 
| =================================================================== | 
| --- runtime/bin/vmservice/client/lib/service_io.dart	(revision 0) | 
| +++ runtime/bin/vmservice/client/lib/service_io.dart	(revision 0) | 
| @@ -0,0 +1,50 @@ | 
| +// Copyright (c) 2014, 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 service_io; | 
| + | 
| +import 'dart:io'; | 
| + | 
| +import 'package:observatory/service_common.dart'; | 
| + | 
| +// Export the service library. | 
| +export 'package:observatory/service_common.dart'; | 
| + | 
| +class _IOWebSocket implements CommonWebSocket { | 
| +  WebSocket _webSocket; | 
| + | 
| +  void connect(String address, | 
| +               void onOpen(), | 
| +               void onMessage(dynamic data), | 
| +               void onError(), | 
| +               void onClose()) { | 
| +    WebSocket.connect(address).then((WebSocket socket) { | 
| +      _webSocket = socket; | 
| +      _webSocket.listen( | 
| +          onMessage, | 
| +          onError: (dynamic) => onError(), | 
| +          onDone: onClose, | 
| +          cancelOnError: true); | 
| +      onOpen(); | 
| +    }); | 
| +  } | 
| + | 
| +  bool get isOpen => | 
| +      (_webSocket != null) && (_webSocket.readyState == WebSocket.OPEN); | 
| + | 
| +  void send(dynamic data) { | 
| +    _webSocket.add(data); | 
| +  } | 
| + | 
| +  void close() { | 
| +    _webSocket.close(); | 
| +  } | 
| +} | 
| + | 
| +/// The [WebSocketVM] communicates with a Dart VM over WebSocket. The Dart VM | 
| +/// can be embedded in Chromium or standalone. In the case of Chromium, we | 
| +/// make the service requests via the Chrome Remote Debugging Protocol. | 
| +class WebSocketVM extends CommonWebSocketVM { | 
| +  WebSocketVM(WebSocketVMTarget target) : super(target, new _IOWebSocket()); | 
| +} | 
|  |