mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 03:37:43 +00:00
LibCore: Use Core::Stream::LocalSocket in InspectorServerConnection
This commit is contained in:
parent
f823648bae
commit
0249c92313
1 changed files with 31 additions and 12 deletions
|
@ -153,26 +153,42 @@ pid_t EventLoop::s_pid;
|
||||||
class InspectorServerConnection : public Object {
|
class InspectorServerConnection : public Object {
|
||||||
C_OBJECT(InspectorServerConnection)
|
C_OBJECT(InspectorServerConnection)
|
||||||
private:
|
private:
|
||||||
explicit InspectorServerConnection(RefPtr<LocalSocket> socket)
|
explicit InspectorServerConnection(NonnullOwnPtr<Stream::LocalSocket> socket)
|
||||||
: m_socket(move(socket))
|
: m_socket(move(socket))
|
||||||
, m_client_id(s_id_allocator.with_locked([](auto& allocator) {
|
, m_client_id(s_id_allocator.with_locked([](auto& allocator) {
|
||||||
return allocator->allocate();
|
return allocator->allocate();
|
||||||
}))
|
}))
|
||||||
{
|
{
|
||||||
#ifdef __serenity__
|
#ifdef __serenity__
|
||||||
add_child(*m_socket);
|
|
||||||
m_socket->on_ready_to_read = [this] {
|
m_socket->on_ready_to_read = [this] {
|
||||||
u32 length;
|
u32 length;
|
||||||
int nread = m_socket->read((u8*)&length, sizeof(length));
|
auto maybe_nread = m_socket->read({ (u8*)&length, sizeof(length) });
|
||||||
|
if (maybe_nread.is_error()) {
|
||||||
|
dbgln("InspectorServerConnection: Failed to read message length from inspector server connection: {}", maybe_nread.error());
|
||||||
|
shutdown();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto nread = maybe_nread.release_value();
|
||||||
if (nread == 0) {
|
if (nread == 0) {
|
||||||
dbgln_if(EVENTLOOP_DEBUG, "RPC client disconnected");
|
dbgln_if(EVENTLOOP_DEBUG, "RPC client disconnected");
|
||||||
shutdown();
|
shutdown();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
VERIFY(nread == sizeof(length));
|
|
||||||
auto request = m_socket->read(length);
|
|
||||||
|
|
||||||
auto request_json = JsonValue::from_string(request);
|
VERIFY(nread == sizeof(length));
|
||||||
|
|
||||||
|
auto request_buffer = ByteBuffer::create_uninitialized(length).release_value();
|
||||||
|
maybe_nread = m_socket->read(request_buffer.bytes());
|
||||||
|
if (maybe_nread.is_error()) {
|
||||||
|
dbgln("InspectorServerConnection: Failed to read message content from inspector server connection: {}", maybe_nread.error());
|
||||||
|
shutdown();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
nread = maybe_nread.release_value();
|
||||||
|
|
||||||
|
auto request_json = JsonValue::from_string(request_buffer);
|
||||||
if (request_json.is_error() || !request_json.value().is_object()) {
|
if (request_json.is_error() || !request_json.value().is_object()) {
|
||||||
dbgln("RPC client sent invalid request");
|
dbgln("RPC client sent invalid request");
|
||||||
shutdown();
|
shutdown();
|
||||||
|
@ -196,8 +212,9 @@ public:
|
||||||
{
|
{
|
||||||
auto serialized = response.to_string();
|
auto serialized = response.to_string();
|
||||||
u32 length = serialized.length();
|
u32 length = serialized.length();
|
||||||
m_socket->write((const u8*)&length, sizeof(length));
|
// FIXME: Propagate errors
|
||||||
m_socket->write(serialized);
|
MUST(m_socket->write({ (const u8*)&length, sizeof(length) }));
|
||||||
|
MUST(m_socket->write(serialized.bytes()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void handle_request(const JsonObject& request)
|
void handle_request(const JsonObject& request)
|
||||||
|
@ -280,7 +297,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
RefPtr<LocalSocket> m_socket;
|
NonnullOwnPtr<Stream::LocalSocket> m_socket;
|
||||||
WeakPtr<Object> m_inspected_object;
|
WeakPtr<Object> m_inspected_object;
|
||||||
int m_client_id { -1 };
|
int m_client_id { -1 };
|
||||||
};
|
};
|
||||||
|
@ -342,11 +359,13 @@ EventLoop::~EventLoop()
|
||||||
bool connect_to_inspector_server()
|
bool connect_to_inspector_server()
|
||||||
{
|
{
|
||||||
#ifdef __serenity__
|
#ifdef __serenity__
|
||||||
auto socket = Core::LocalSocket::construct();
|
auto maybe_socket = Core::Stream::LocalSocket::connect("/tmp/portal/inspectables");
|
||||||
if (!socket->connect(SocketAddress::local("/tmp/portal/inspectables")))
|
if (maybe_socket.is_error()) {
|
||||||
|
dbgln("connect_to_inspector_server: Failed to connect: {}", maybe_socket.error());
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
s_inspector_server_connection.with_locked([&](auto& inspector_server_connection) {
|
s_inspector_server_connection.with_locked([&](auto& inspector_server_connection) {
|
||||||
inspector_server_connection = InspectorServerConnection::construct(move(socket));
|
inspector_server_connection = InspectorServerConnection::construct(maybe_socket.release_value());
|
||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
#else
|
#else
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue