| Index: runtime/bin/vmservice/client/observatory/packages/observatory/src/observatory/request_manager.dart
|
| diff --git a/runtime/bin/vmservice/client/observatory/packages/observatory/src/observatory/request_manager.dart b/runtime/bin/vmservice/client/observatory/packages/observatory/src/observatory/request_manager.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..666388bad8dbd9ed89690d27b9fc0a10531edcbe
|
| --- /dev/null
|
| +++ b/runtime/bin/vmservice/client/observatory/packages/observatory/src/observatory/request_manager.dart
|
| @@ -0,0 +1,60 @@
|
| +part of observatory;
|
| +
|
| +/// A request response interceptor is called for each response.
|
| +typedef void RequestResponseInterceptor();
|
| +
|
| +abstract class RequestManager extends Object with ObservableMixin {
|
| + ObservatoryApplication _application;
|
| + ObservatoryApplication get application => _application;
|
| + RequestResponseInterceptor interceptor;
|
| +
|
| + /// The default request prefix is 127.0.0.1 on port 8181.
|
| + @observable String prefix = 'http://127.0.0.1:8181';
|
| + /// List of responses.
|
| + @observable List<Map> responses = toObservable([]);
|
| +
|
| + /// Parse
|
| + void parseResponses(String responseString) {
|
| + var r = JSON.decode(responseString);
|
| + if (r is Map) {
|
| + setResponses([r]);
|
| + } else {
|
| + setResponses(r);
|
| + }
|
| + }
|
| +
|
| + void setResponses(List<Map> r) {
|
| + responses = toObservable(r);
|
| + if (interceptor != null) {
|
| + interceptor();
|
| + }
|
| + }
|
| +
|
| + void setResponseError(String error) {
|
| + setResponses([{
|
| + 'type': 'RequestError',
|
| + 'error': error
|
| + }]);
|
| + }
|
| +
|
| + /// Request [requestString] from the VM service. Updates [responses].
|
| + /// Will trigger [interceptor] if one is set.
|
| + Future<Map> get(String requestString) {
|
| + request(requestString).then((responseString) {
|
| + parseResponses(responseString);
|
| + }).catchError((e) {
|
| + setResponseError(e.toString());
|
| + });
|
| + }
|
| +
|
| + /// Abstract method. Given the [requestString], return a String in the
|
| + /// future which contains the reply from the VM service.
|
| + Future<String> request(String requestString);
|
| +}
|
| +
|
| +
|
| +class HttpRequestManager extends RequestManager {
|
| + Future<String> request(String requestString) {
|
| + return HttpRequest.getString(prefix + requestString);
|
| + }
|
| +}
|
|
|