rename RpcChannel to IpcChannel
This commit is contained in:
@@ -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;
|
||||
};
|
||||
+3
-3
@@ -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 %}
|
||||
|
||||
Reference in New Issue
Block a user