Index: lib/src/client.dart |
diff --git a/lib/src/client.dart b/lib/src/client.dart |
index f63fde6cb8ca4d60d2299dcdb0bb0624d191f048..ee2db1e9ff38540636d8fe8a00e283cf35b3b3f2 100644 |
--- a/lib/src/client.dart |
+++ b/lib/src/client.dart |
@@ -28,9 +28,8 @@ class Client { |
/// Each element is a JSON-serializable object. |
List _batch; |
- /// The map of request ids for pending requests to [Completer]s that will be |
- /// completed with those requests' responses. |
- final _pendingRequests = new Map<int, Completer>(); |
+ /// The map of request ids to pending requests. |
+ final _pendingRequests = new Map<int, _Request>(); |
/// Returns a [Future] that completes when the connection is closed. |
/// |
@@ -94,7 +93,7 @@ class Client { |
_send(method, parameters, id); |
var completer = new Completer.sync(); |
- _pendingRequests[id] = completer; |
+ _pendingRequests[id] = new _Request(completer, new Chain.current()); |
return completer.future; |
} |
@@ -171,15 +170,15 @@ class Client { |
/// resolved. |
void _handleSingleResponse(response) { |
if (!_isResponseValid(response)) return; |
- var completer = _pendingRequests.remove(response["id"]); |
+ var request = _pendingRequests.remove(response["id"]); |
if (response.containsKey("result")) { |
- completer.complete(response["result"]); |
+ request.completer.complete(response["result"]); |
} else { |
- completer.completeError(new RpcException( |
+ request.completer.completeError(new RpcException( |
response["error"]["code"], |
response["error"]["message"], |
data: response["error"]["data"]), |
- new Chain.current()); |
+ request.chain); |
} |
} |
@@ -198,3 +197,14 @@ class Client { |
return true; |
} |
} |
+ |
+/// A pending request to the server. |
+class _Request { |
+ /// The completer to use to complete the response future. |
+ final Completer completer; |
+ |
+ /// The stack chain from where the request was made. |
+ final Chain chain; |
+ |
+ _Request(this.completer, this.chain); |
+} |