1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-28 21:47:45 +00:00

LibIPC: Share most of the code between {Client,Server}Connection

This patch introduces IPC::Connection which becomes the new base class
of ClientConnection and ServerConnection. Most of the functionality
has been hoisted up to the base class since almost all of it is useful
on both sides.

This gives us the ability to send synchronous messages in both
directions, which is needed for the WebContent server process.
Unlike other servers, WebContent does not mind blocking on a response
from its client.
This commit is contained in:
Andreas Kling 2020-09-12 11:44:00 +02:00
parent 633e0bc944
commit aba793fb3e
19 changed files with 293 additions and 260 deletions

View file

@ -51,7 +51,7 @@ void ClientConnection::for_each(Function<void(ClientConnection&)> callback)
}
ClientConnection::ClientConnection(NonnullRefPtr<Core::LocalSocket> client_socket, int client_id, Mixer& mixer)
: IPC::ClientConnection<AudioServerEndpoint>(*this, move(client_socket), client_id)
: IPC::ClientConnection<AudioClientEndpoint, AudioServerEndpoint>(*this, move(client_socket), client_id)
, m_mixer(mixer)
{
s_connections.set(client_id, *this);

View file

@ -27,6 +27,7 @@
#pragma once
#include <AK/HashMap.h>
#include <AudioServer/AudioClientEndpoint.h>
#include <AudioServer/AudioServerEndpoint.h>
#include <LibIPC/ClientConnection.h>
@ -39,7 +40,7 @@ namespace AudioServer {
class BufferQueue;
class Mixer;
class ClientConnection final : public IPC::ClientConnection<AudioServerEndpoint>
class ClientConnection final : public IPC::ClientConnection<AudioClientEndpoint, AudioServerEndpoint>
, public AudioServerEndpoint {
C_OBJECT(ClientConnection)
public:

View file

@ -42,7 +42,7 @@ void ClientConnection::for_each_client(Function<void(ClientConnection&)> callbac
}
ClientConnection::ClientConnection(NonnullRefPtr<Core::LocalSocket> socket, int client_id)
: IPC::ClientConnection<ClipboardServerEndpoint>(*this, move(socket), client_id)
: IPC::ClientConnection<ClipboardClientEndpoint, ClipboardServerEndpoint>(*this, move(socket), client_id)
{
s_connections.set(client_id, *this);
}

View file

@ -27,13 +27,16 @@
#pragma once
#include <AK/HashMap.h>
#include <Clipboard/ClipboardClientEndpoint.h>
#include <Clipboard/ClipboardServerEndpoint.h>
#include <LibIPC/ClientConnection.h>
namespace Clipboard {
class ClientConnection final : public IPC::ClientConnection<ClipboardServerEndpoint>
class ClientConnection final
: public IPC::ClientConnection<ClipboardClientEndpoint, ClipboardServerEndpoint>
, public ClipboardServerEndpoint {
C_OBJECT(ClientConnection);
public:

View file

@ -37,7 +37,7 @@ namespace ImageDecoder {
static HashMap<int, RefPtr<ClientConnection>> s_connections;
ClientConnection::ClientConnection(NonnullRefPtr<Core::LocalSocket> socket, int client_id)
: IPC::ClientConnection<ImageDecoderServerEndpoint>(*this, move(socket), client_id)
: IPC::ClientConnection<ImageDecoderClientEndpoint, ImageDecoderServerEndpoint>(*this, move(socket), client_id)
{
s_connections.set(client_id, *this);
}

View file

@ -28,6 +28,7 @@
#include <AK/HashMap.h>
#include <ImageDecoder/Forward.h>
#include <ImageDecoder/ImageDecoderClientEndpoint.h>
#include <ImageDecoder/ImageDecoderServerEndpoint.h>
#include <LibIPC/ClientConnection.h>
#include <LibWeb/Forward.h>
@ -35,7 +36,7 @@
namespace ImageDecoder {
class ClientConnection final
: public IPC::ClientConnection<ImageDecoderServerEndpoint>
: public IPC::ClientConnection<ImageDecoderClientEndpoint, ImageDecoderServerEndpoint>
, public ImageDecoderServerEndpoint {
C_OBJECT(ClientConnection);

View file

@ -34,7 +34,7 @@ namespace LaunchServer {
static HashMap<int, RefPtr<ClientConnection>> s_connections;
ClientConnection::ClientConnection(NonnullRefPtr<Core::LocalSocket> client_socket, int client_id)
: IPC::ClientConnection<LaunchServerEndpoint>(*this, move(client_socket), client_id)
: IPC::ClientConnection<LaunchClientEndpoint, LaunchServerEndpoint>(*this, move(client_socket), client_id)
{
s_connections.set(client_id, *this);
}

View file

@ -26,12 +26,13 @@
#pragma once
#include <LaunchServer/LaunchClientEndpoint.h>
#include <LaunchServer/LaunchServerEndpoint.h>
#include <LibIPC/ClientConnection.h>
namespace LaunchServer {
class ClientConnection final : public IPC::ClientConnection<LaunchServerEndpoint>
class ClientConnection final : public IPC::ClientConnection<LaunchClientEndpoint, LaunchServerEndpoint>
, public LaunchServerEndpoint {
C_OBJECT(ClientConnection)
public:

View file

@ -34,7 +34,7 @@ namespace NotificationServer {
static HashMap<int, RefPtr<ClientConnection>> s_connections;
ClientConnection::ClientConnection(NonnullRefPtr<Core::LocalSocket> client_socket, int client_id)
: IPC::ClientConnection<NotificationServerEndpoint>(*this, move(client_socket), client_id)
: IPC::ClientConnection<NotificationClientEndpoint, NotificationServerEndpoint>(*this, move(client_socket), client_id)
{
s_connections.set(client_id, *this);
}

View file

@ -27,11 +27,12 @@
#pragma once
#include <LibIPC/ClientConnection.h>
#include <NotificationServer/NotificationClientEndpoint.h>
#include <NotificationServer/NotificationServerEndpoint.h>
namespace NotificationServer {
class ClientConnection final : public IPC::ClientConnection<NotificationServerEndpoint>
class ClientConnection final : public IPC::ClientConnection<NotificationClientEndpoint, NotificationServerEndpoint>
, public NotificationServerEndpoint {
C_OBJECT(ClientConnection)
public:

View file

@ -36,7 +36,7 @@ namespace ProtocolServer {
static HashMap<int, RefPtr<ClientConnection>> s_connections;
ClientConnection::ClientConnection(NonnullRefPtr<Core::LocalSocket> socket, int client_id)
: IPC::ClientConnection<ProtocolServerEndpoint>(*this, move(socket), client_id)
: IPC::ClientConnection<ProtocolClientEndpoint, ProtocolServerEndpoint>(*this, move(socket), client_id)
{
s_connections.set(client_id, *this);
}

View file

@ -29,12 +29,13 @@
#include <AK/HashMap.h>
#include <LibIPC/ClientConnection.h>
#include <ProtocolServer/Forward.h>
#include <ProtocolServer/ProtocolClientEndpoint.h>
#include <ProtocolServer/ProtocolServerEndpoint.h>
namespace ProtocolServer {
class ClientConnection final
: public IPC::ClientConnection<ProtocolServerEndpoint>
: public IPC::ClientConnection<ProtocolClientEndpoint, ProtocolServerEndpoint>
, public ProtocolServerEndpoint {
C_OBJECT(ClientConnection);

View file

@ -37,7 +37,7 @@ namespace WebContent {
static HashMap<int, RefPtr<ClientConnection>> s_connections;
ClientConnection::ClientConnection(NonnullRefPtr<Core::LocalSocket> socket, int client_id)
: IPC::ClientConnection<WebContentServerEndpoint>(*this, move(socket), client_id)
: IPC::ClientConnection<WebContentClientEndpoint, WebContentServerEndpoint>(*this, move(socket), client_id)
, m_page_host(PageHost::create(*this))
{
s_connections.set(client_id, *this);

View file

@ -30,12 +30,13 @@
#include <LibIPC/ClientConnection.h>
#include <LibWeb/Forward.h>
#include <WebContent/Forward.h>
#include <WebContent/WebContentClientEndpoint.h>
#include <WebContent/WebContentServerEndpoint.h>
namespace WebContent {
class ClientConnection final
: public IPC::ClientConnection<WebContentServerEndpoint>
: public IPC::ClientConnection<WebContentClientEndpoint, WebContentServerEndpoint>
, public WebContentServerEndpoint {
C_OBJECT(ClientConnection);

View file

@ -78,7 +78,7 @@ ClientConnection* ClientConnection::from_client_id(int client_id)
}
ClientConnection::ClientConnection(NonnullRefPtr<Core::LocalSocket> client_socket, int client_id)
: IPC::ClientConnection<WindowServerEndpoint>(*this, move(client_socket), client_id)
: IPC::ClientConnection<WindowClientEndpoint, WindowServerEndpoint>(*this, move(client_socket), client_id)
{
if (!s_connections)
s_connections = new HashMap<int, NonnullRefPtr<ClientConnection>>;

View file

@ -35,6 +35,7 @@
#include <LibGfx/Bitmap.h>
#include <LibIPC/ClientConnection.h>
#include <WindowServer/Event.h>
#include <WindowServer/WindowClientEndpoint.h>
#include <WindowServer/WindowServerEndpoint.h>
namespace WindowServer {
@ -45,7 +46,7 @@ class Menu;
class MenuBar;
class ClientConnection final
: public IPC::ClientConnection<WindowServerEndpoint>
: public IPC::ClientConnection<WindowClientEndpoint, WindowServerEndpoint>
, public WindowServerEndpoint {
C_OBJECT(ClientConnection)
public: