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

Unified Diff: runtime/observatory/lib/service_common.dart

Issue 2340973002: Improve VM connection flow in Observatory (Closed)
Patch Set: ... Created 4 years, 3 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 | « runtime/observatory/lib/app.dart ('k') | runtime/observatory/lib/src/app/application.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/observatory/lib/service_common.dart
diff --git a/runtime/observatory/lib/service_common.dart b/runtime/observatory/lib/service_common.dart
index cd146ee16573062a6455dade87be0481f643a8a2..240855f55c637dfd3e75131c2a8fc7ebbcea4fff 100644
--- a/runtime/observatory/lib/service_common.dart
+++ b/runtime/observatory/lib/service_common.dart
@@ -88,7 +88,6 @@ abstract class CommonWebSocketVM extends VM {
new Map<String, _WebSocketRequest>();
int _requestSerial = 0;
bool _hasInitiatedConnect = false;
- bool _hasFinishedConnect = false;
Utf8Decoder _utf8Decoder = const Utf8Decoder();
String get displayName => '${name}@${target.name}';
@@ -100,17 +99,15 @@ abstract class CommonWebSocketVM extends VM {
}
void _notifyConnect() {
- _hasFinishedConnect = true;
if (!_connected.isCompleted) {
Logger.root.info('WebSocketVM connection opened: ${target.networkAddress}');
_connected.complete(this);
}
}
Future get onConnect => _connected.future;
+ bool get wasOrIsConnected => _connected.isCompleted;
+ bool get isConnected => wasOrIsConnected && !isDisconnected;
void _notifyDisconnect(String reason) {
- if (!_hasFinishedConnect) {
- return;
- }
if (!_disconnected.isCompleted) {
Logger.root.info('WebSocketVM connection error: ${target.networkAddress}');
_disconnected.complete(reason);
@@ -121,7 +118,9 @@ abstract class CommonWebSocketVM extends VM {
void disconnect({String reason : 'WebSocket closed'}) {
if (_hasInitiatedConnect) {
- _webSocket.close();
+ if (_webSocket != null) {
+ _webSocket.close();
+ }
}
// We don't need to cancel requests and notify here. These
// functions will be called again when the onClose callback
@@ -134,8 +133,14 @@ abstract class CommonWebSocketVM extends VM {
Future<Map> invokeRpcRaw(String method, Map params) {
if (!_hasInitiatedConnect) {
_hasInitiatedConnect = true;
- _webSocket.connect(
- target.networkAddress, _onOpen, _onMessage, _onError, _onClose);
+ try {
+ _webSocket.connect(
+ target.networkAddress, _onOpen, _onMessage, _onError, _onClose);
+ } catch (_) {
+ _webSocket = null;
+ var exception = new NetworkRpcException('WebSocket closed');
+ return new Future.error(exception);
+ }
}
if (_disconnected.isCompleted) {
// This connection was closed already.
@@ -144,7 +149,7 @@ abstract class CommonWebSocketVM extends VM {
}
String serial = (_requestSerial++).toString();
var request = new _WebSocketRequest(method, params);
- if (_webSocket.isOpen) {
+ if ((_webSocket != null) && _webSocket.isOpen) {
// Already connected, send request immediately.
_sendRequest(serial, request);
} else {
@@ -265,8 +270,9 @@ abstract class CommonWebSocketVM extends VM {
void _cancelRequests(Map<String,_WebSocketRequest> requests,
String message) {
- requests.forEach((_, _WebSocketRequest request) {
- var exception = new NetworkRpcException(message);
+ requests.forEach((String serial, _WebSocketRequest request) {
+ var exception = new NetworkRpcException(message +
+ '(id: $serial method: ${request.method} params: ${request.params})');
request.completer.completeError(exception);
});
requests.clear();
@@ -329,4 +335,6 @@ abstract class CommonWebSocketVM extends VM {
// Send message.
_webSocket.send(message);
}
+
+ String toString() => displayName;
}
« no previous file with comments | « runtime/observatory/lib/app.dart ('k') | runtime/observatory/lib/src/app/application.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698