rename RpcChannel to IpcChannel

master
Сергей Маринкевич 2 months ago
parent c6fed622ee
commit 7495f540d2

@ -50,7 +50,7 @@ project/
* Разбор: `auto name = msg.get<std::string>(); auto a = msg.get<int>(); auto b = msg.get<int>();`
* Внутри хранится строка с простыми типовыми тегами (`i` для `int`, `s` для `std::string`), что позволяет в будущем перейти на бинарный формат без изменения API.
* **Уровень канала**: `RpcChannel` + `IpcPipeChannel`
* `RpcChannel` — абстракция: `send(const IpcMessage&)`, `receive() -> IpcMessage`.
* `IpcChannel` — абстракция транспорта: `send(const IpcMessage&)`, `receive() -> IpcMessage`.
* `IpcPipeChannel` — реализация поверх двух FIFO (`/tmp/fifo_to_server`, `/tmp/fifo_to_client`), которая внутри работает со строками, но наружу — только с `IpcMessage`.
* **Уровень RPC-ядра**:
* `RpcClient` — собирает `IpcMessage` из имени метода и аргументов, отправляет через `RpcChannel` и читает ответ.

@ -0,0 +1,15 @@
#pragma once
#include "IpcMessage.h"
// Абстракция IPCканала, работающего с IpcMessage.
// Живёт отдельно от RPCкода, чтобы транспорт не зависел от конкретной RPCреализации.
class IpcChannel {
public:
virtual ~IpcChannel() = default;
virtual void send(const IpcMessage& msg) = 0;
virtual IpcMessage receive() = 0;
};

@ -1,6 +1,6 @@
#pragma once
#include "RpcChannel.h"
#include "IpcChannel.h"
#include <fcntl.h>
#include <sys/stat.h>
@ -10,7 +10,7 @@
// Инкапсулирует работу с файловыми дескрипторами и обмен сообщениями IpcMessage.
// readPipe — тот FIFO, который этот endpoint читает; writePipe — тот, в который пишет.
class IpcPipeChannel : public RpcChannel {
class IpcPipeChannel : public IpcChannel {
public:
IpcPipeChannel(const char* readPipe, const char* writePipe) {
// Канал не создаёт FIFO, только открывает.
@ -55,4 +55,3 @@ private:
int fdIn_{-1};
int fdOut_{-1};
};

@ -1,10 +0,0 @@
#pragma once
#include "IpcMessage.h"
class RpcChannel {
public:
virtual ~RpcChannel() = default;
virtual void send(const IpcMessage& msg) = 0;
virtual IpcMessage receive() = 0;
};

@ -1,10 +1,10 @@
#pragma once
#include "RpcChannel.h"
#include "IpcChannel.h"
class RpcClient {
public:
explicit RpcClient(RpcChannel& ch) : channel(ch) {}
explicit RpcClient(IpcChannel& ch) : channel(ch) {}
template<typename Ret, typename... Args>
Ret call(const std::string& method, const Args&... args) {
@ -25,7 +25,7 @@ public:
}
private:
RpcChannel& channel;
IpcChannel& channel;
};

@ -3,13 +3,13 @@
class {{ cls.name }}Proxy::Impl {
public:
explicit Impl(RpcChannel& ch)
explicit Impl(IpcChannel& ch)
: client(ch) {}
RpcClient client;
};
{{ cls.name }}Proxy::{{ cls.name }}Proxy(RpcChannel& ch)
{{ cls.name }}Proxy::{{ cls.name }}Proxy(IpcChannel& ch)
: impl(new Impl(ch)) {}
{% for m in cls.methods %}

@ -1,10 +1,10 @@
#pragma once
#include "rpc/RpcChannel.h"
#include "rpc/IpcChannel.h"
class {{ cls.name }}Proxy {
public:
explicit {{ cls.name }}Proxy(RpcChannel& ch);
explicit {{ cls.name }}Proxy(IpcChannel& ch);
{% for m in cls.methods %}
{{ m.return_type }} {{ m.name }}({% for a in m.args %}{{ a.type }} {{ a.name }}{% if not loop.last %}, {% endif %}{% endfor %});
{% endfor %}

Loading…
Cancel
Save