| Index: runtime/vm/service.cc
|
| diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc
|
| index 87387058b04ff354e9adb4f5c9a82dd0684cd12a..c6ee419b9a47b800090147baad2998aff74ed6e3 100644
|
| --- a/runtime/vm/service.cc
|
| +++ b/runtime/vm/service.cc
|
| @@ -56,15 +56,9 @@ static void PrintRequest(const JSONObject& obj, JSONStream* js) {
|
| JSONObject jsobj(&obj, "request");
|
| jsobj.AddProperty("method", js->method());
|
| {
|
| - JSONArray jsarr(&jsobj, "param_keys");
|
| + JSONObject params(&jsobj, "params");
|
| for (intptr_t i = 0; i < js->num_params(); i++) {
|
| - jsarr.AddValue(js->GetParamKey(i));
|
| - }
|
| - }
|
| - {
|
| - JSONArray jsarr(&jsobj, "param_values");
|
| - for (intptr_t i = 0; i < js->num_params(); i++) {
|
| - jsarr.AddValue(js->GetParamValue(i));
|
| + params.AddProperty(js->GetParamKey(i), js->GetParamValue(i));
|
| }
|
| }
|
| }
|
| @@ -424,22 +418,25 @@ static bool ValidateParameters(const MethodParameter* const* parameters,
|
| void Service::InvokeMethod(Isolate* isolate, const Array& msg) {
|
| ASSERT(isolate != NULL);
|
| ASSERT(!msg.IsNull());
|
| - ASSERT(msg.Length() == 5);
|
| + ASSERT(msg.Length() == 6);
|
|
|
| {
|
| StackZone zone(isolate);
|
| HANDLESCOPE(isolate);
|
|
|
| Instance& reply_port = Instance::Handle(isolate);
|
| + String& seq = String::Handle(isolate);
|
| String& method_name = String::Handle(isolate);
|
| Array& param_keys = Array::Handle(isolate);
|
| Array& param_values = Array::Handle(isolate);
|
| reply_port ^= msg.At(1);
|
| - method_name ^= msg.At(2);
|
| - param_keys ^= msg.At(3);
|
| - param_values ^= msg.At(4);
|
| + seq ^= msg.At(2);
|
| + method_name ^= msg.At(3);
|
| + param_keys ^= msg.At(4);
|
| + param_values ^= msg.At(5);
|
|
|
| ASSERT(!method_name.IsNull());
|
| + ASSERT(!seq.IsNull());
|
| ASSERT(!param_keys.IsNull());
|
| ASSERT(!param_values.IsNull());
|
| ASSERT(param_keys.Length() == param_values.Length());
|
| @@ -450,7 +447,7 @@ void Service::InvokeMethod(Isolate* isolate, const Array& msg) {
|
|
|
| JSONStream js;
|
| js.Setup(zone.GetZone(), SendPort::Cast(reply_port).Id(),
|
| - method_name, param_keys, param_values);
|
| + seq, method_name, param_keys, param_values);
|
|
|
| const char* c_method_name = method_name.ToCString();
|
|
|
| @@ -560,21 +557,15 @@ void Service::SendEvent(const String& meta,
|
| }
|
|
|
|
|
| -void Service::HandleGCEvent(GCEvent* event) {
|
| - if (ServiceIsolate::IsServiceIsolateDescendant(Isolate::Current())) {
|
| +void Service::HandleEvent(ServiceEvent* event) {
|
| + if (ServiceIsolate::IsServiceIsolateDescendant(event->isolate())) {
|
| return;
|
| }
|
| JSONStream js;
|
| - event->PrintJSON(&js);
|
| - const String& message = String::Handle(String::New(js.ToCString()));
|
| - // TODO(turnidge): Pass the real eventType here.
|
| - SendEvent(0, message);
|
| -}
|
| -
|
| -
|
| -void Service::HandleEvent(ServiceEvent* event) {
|
| - JSONStream js;
|
| - event->PrintJSON(&js);
|
| + {
|
| + JSONObject jsobj(&js);
|
| + jsobj.AddProperty("event", event);
|
| + }
|
| const String& message = String::Handle(String::New(js.ToCString()));
|
| SendEvent(event->type(), message);
|
| }
|
| @@ -762,11 +753,14 @@ void Service::SendEchoEvent(Isolate* isolate, const char* text) {
|
| JSONStream js;
|
| {
|
| JSONObject jsobj(&js);
|
| - jsobj.AddProperty("type", "ServiceEvent");
|
| - jsobj.AddProperty("eventType", "_Echo");
|
| - jsobj.AddProperty("isolate", isolate);
|
| - if (text != NULL) {
|
| - jsobj.AddProperty("text", text);
|
| + {
|
| + JSONObject event(&jsobj, "event");
|
| + event.AddProperty("type", "ServiceEvent");
|
| + event.AddProperty("eventType", "_Echo");
|
| + event.AddProperty("isolate", isolate);
|
| + if (text != NULL) {
|
| + event.AddProperty("text", text);
|
| + }
|
| }
|
| }
|
| const String& message = String::Handle(String::New(js.ToCString()));
|
| @@ -2202,9 +2196,12 @@ void Service::SendGraphEvent(Isolate* isolate) {
|
| JSONStream js;
|
| {
|
| JSONObject jsobj(&js);
|
| - jsobj.AddProperty("type", "ServiceEvent");
|
| - jsobj.AddProperty("eventType", "_Graph");
|
| - jsobj.AddProperty("isolate", isolate);
|
| + {
|
| + JSONObject event(&jsobj, "event");
|
| + event.AddProperty("type", "ServiceEvent");
|
| + event.AddProperty("eventType", "_Graph");
|
| + event.AddProperty("isolate", isolate);
|
| + }
|
| }
|
| const String& message = String::Handle(String::New(js.ToCString()));
|
| SendEvent(message, buffer, stream.bytes_written());
|
|
|