diff options
Diffstat (limited to 'Userland/Services/InspectorServer/ConnectionFromClient.cpp')
-rw-r--r-- | Userland/Services/InspectorServer/ConnectionFromClient.cpp | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/Userland/Services/InspectorServer/ConnectionFromClient.cpp b/Userland/Services/InspectorServer/ConnectionFromClient.cpp new file mode 100644 index 0000000000..db51a87729 --- /dev/null +++ b/Userland/Services/InspectorServer/ConnectionFromClient.cpp @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2021, Andreas Kling <kling@serenityos.org> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include "InspectableProcess.h" +#include <AK/JsonObject.h> +#include <InspectorServer/ConnectionFromClient.h> + +namespace InspectorServer { + +static HashMap<int, RefPtr<ConnectionFromClient>> s_connections; + +ConnectionFromClient::ConnectionFromClient(NonnullOwnPtr<Core::Stream::LocalSocket> socket, int client_id) + : IPC::ConnectionFromClient<InspectorClientEndpoint, InspectorServerEndpoint>(*this, move(socket), client_id) +{ + s_connections.set(client_id, *this); +} + +ConnectionFromClient::~ConnectionFromClient() +{ +} + +void ConnectionFromClient::die() +{ + s_connections.remove(client_id()); +} + +Messages::InspectorServer::GetAllObjectsResponse ConnectionFromClient::get_all_objects(pid_t pid) +{ + auto process = InspectableProcess::from_pid(pid); + if (!process) + return String {}; + + JsonObject request; + request.set("type", "GetAllObjects"); + process->send_request(request); + auto response = process->wait_for_response(); + return response; +} + +Messages::InspectorServer::SetInspectedObjectResponse ConnectionFromClient::set_inspected_object(pid_t pid, u64 object_id) +{ + auto process = InspectableProcess::from_pid(pid); + if (!process) + return false; + + JsonObject request; + request.set("type", "SetInspectedObject"); + request.set("address", object_id); + process->send_request(request); + return true; +} + +Messages::InspectorServer::SetObjectPropertyResponse ConnectionFromClient::set_object_property(pid_t pid, u64 object_id, String const& name, String const& value) +{ + auto process = InspectableProcess::from_pid(pid); + if (!process) + return false; + + JsonObject request; + request.set("type", "SetProperty"); + request.set("address", object_id); + request.set("name", name); + request.set("value", value); + process->send_request(request); + return true; +} + +Messages::InspectorServer::IdentifyResponse ConnectionFromClient::identify(pid_t pid) +{ + auto process = InspectableProcess::from_pid(pid); + if (!process) + return String {}; + + JsonObject request; + request.set("type", "Identify"); + process->send_request(request); + auto response = process->wait_for_response(); + return response; +} + +Messages::InspectorServer::IsInspectableResponse ConnectionFromClient::is_inspectable(pid_t pid) +{ + auto process = InspectableProcess::from_pid(pid); + if (!process) + return false; + + return true; +} + +} |