Index: runtime/vm/service_isolate.cc |
diff --git a/runtime/vm/service_isolate.cc b/runtime/vm/service_isolate.cc |
index c5e2e753039753048003e07879311161ffbde059..5a3b1d4b5bfdc360933de5dcd06bdcc41a48c893 100644 |
--- a/runtime/vm/service_isolate.cc |
+++ b/runtime/vm/service_isolate.cc |
@@ -43,6 +43,9 @@ static uint8_t* allocator(uint8_t* ptr, intptr_t old_size, intptr_t new_size) { |
#define VM_SERVICE_ISOLATE_STARTUP_MESSAGE_ID 1 |
#define VM_SERVICE_ISOLATE_SHUTDOWN_MESSAGE_ID 2 |
+#define VM_SERVICE_WEB_SERVER_CONTROL_MESSAGE_ID 3 |
+#define VM_SERVICE_SERVER_INFO_MESSAGE_ID 4 |
+ |
static RawArray* MakeServiceControlMessage(Dart_Port port_id, intptr_t code, |
const String& name) { |
const Array& list = Array::Handle(Array::New(4)); |
@@ -58,6 +61,18 @@ static RawArray* MakeServiceControlMessage(Dart_Port port_id, intptr_t code, |
} |
+static RawArray* MakeServerControlMessage(const SendPort& sp, |
+ intptr_t code, |
+ bool enable = false) { |
+ const Array& list = Array::Handle(Array::New(3)); |
+ ASSERT(!list.IsNull()); |
+ list.SetAt(0, Integer::Handle(Integer::New(code))); |
+ list.SetAt(1, sp); |
+ list.SetAt(2, Bool::Get(enable)); |
+ return list.raw(); |
+} |
+ |
+ |
static RawArray* MakeServiceExitMessage() { |
const Array& list = Array::Handle(Array::New(1)); |
ASSERT(!list.IsNull()); |
@@ -81,6 +96,36 @@ bool ServiceIsolate::initializing_ = true; |
bool ServiceIsolate::shutting_down_ = false; |
char* ServiceIsolate::server_address_ = NULL; |
+void ServiceIsolate::RequestServerInfo(const SendPort& sp) { |
+ const Array& message = |
+ Array::Handle( |
+ MakeServerControlMessage(sp, |
+ VM_SERVICE_SERVER_INFO_MESSAGE_ID, |
+ false /* ignored */)); |
+ ASSERT(!message.IsNull()); |
+ uint8_t* data = NULL; |
+ MessageWriter writer(&data, &allocator, false); |
+ writer.WriteMessage(message); |
+ intptr_t len = writer.BytesWritten(); |
+ PortMap::PostMessage(new Message(port_, data, len, Message::kNormalPriority)); |
+} |
+ |
+ |
+void ServiceIsolate::ControlWebServer(const SendPort& sp, bool enable) { |
+ const Array& message = |
+ Array::Handle( |
+ MakeServerControlMessage(sp, |
+ VM_SERVICE_WEB_SERVER_CONTROL_MESSAGE_ID, |
+ enable)); |
+ ASSERT(!message.IsNull()); |
+ uint8_t* data = NULL; |
+ MessageWriter writer(&data, &allocator, false); |
+ writer.WriteMessage(message); |
+ intptr_t len = writer.BytesWritten(); |
+ PortMap::PostMessage(new Message(port_, data, len, Message::kNormalPriority)); |
+} |
+ |
+ |
void ServiceIsolate::SetServerAddress(const char* address) { |
if (server_address_ != NULL) { |
free(server_address_); |