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>();`
|
* Разбор: `auto name = msg.get<std::string>(); auto a = msg.get<int>(); auto b = msg.get<int>();`
|
||||||
* Внутри хранится строка с простыми типовыми тегами (`i` для `int`, `s` для `std::string`), что позволяет в будущем перейти на бинарный формат без изменения API.
|
* Внутри хранится строка с простыми типовыми тегами (`i` для `int`, `s` для `std::string`), что позволяет в будущем перейти на бинарный формат без изменения API.
|
||||||
* **Уровень канала**: `RpcChannel` + `IpcPipeChannel`
|
* **Уровень канала**: `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`.
|
* `IpcPipeChannel` — реализация поверх двух FIFO (`/tmp/fifo_to_server`, `/tmp/fifo_to_client`), которая внутри работает со строками, но наружу — только с `IpcMessage`.
|
||||||
* **Уровень RPC-ядра**:
|
* **Уровень RPC-ядра**:
|
||||||
* `RpcClient` — собирает `IpcMessage` из имени метода и аргументов, отправляет через `RpcChannel` и читает ответ.
|
* `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
|
#pragma once
|
||||||
|
|
||||||
#include "RpcChannel.h"
|
#include "IpcChannel.h"
|
||||||
|
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
// Инкапсулирует работу с файловыми дескрипторами и обмен сообщениями IpcMessage.
|
// Инкапсулирует работу с файловыми дескрипторами и обмен сообщениями IpcMessage.
|
||||||
// readPipe — тот FIFO, который этот endpoint читает; writePipe — тот, в который пишет.
|
// readPipe — тот FIFO, который этот endpoint читает; writePipe — тот, в который пишет.
|
||||||
|
|
||||||
class IpcPipeChannel : public RpcChannel {
|
class IpcPipeChannel : public IpcChannel {
|
||||||
public:
|
public:
|
||||||
IpcPipeChannel(const char* readPipe, const char* writePipe) {
|
IpcPipeChannel(const char* readPipe, const char* writePipe) {
|
||||||
// Канал не создаёт FIFO, только открывает.
|
// Канал не создаёт FIFO, только открывает.
|
||||||
@@ -55,4 +55,3 @@ private:
|
|||||||
int fdIn_{-1};
|
int fdIn_{-1};
|
||||||
int fdOut_{-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
|
#pragma once
|
||||||
|
|
||||||
#include "RpcChannel.h"
|
#include "IpcChannel.h"
|
||||||
|
|
||||||
class RpcClient {
|
class RpcClient {
|
||||||
public:
|
public:
|
||||||
explicit RpcClient(RpcChannel& ch) : channel(ch) {}
|
explicit RpcClient(IpcChannel& ch) : channel(ch) {}
|
||||||
|
|
||||||
template<typename Ret, typename... Args>
|
template<typename Ret, typename... Args>
|
||||||
Ret call(const std::string& method, const Args&... args) {
|
Ret call(const std::string& method, const Args&... args) {
|
||||||
@@ -25,7 +25,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
RpcChannel& channel;
|
IpcChannel& channel;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,13 +3,13 @@
|
|||||||
|
|
||||||
class {{ cls.name }}Proxy::Impl {
|
class {{ cls.name }}Proxy::Impl {
|
||||||
public:
|
public:
|
||||||
explicit Impl(RpcChannel& ch)
|
explicit Impl(IpcChannel& ch)
|
||||||
: client(ch) {}
|
: client(ch) {}
|
||||||
|
|
||||||
RpcClient client;
|
RpcClient client;
|
||||||
};
|
};
|
||||||
|
|
||||||
{{ cls.name }}Proxy::{{ cls.name }}Proxy(RpcChannel& ch)
|
{{ cls.name }}Proxy::{{ cls.name }}Proxy(IpcChannel& ch)
|
||||||
: impl(new Impl(ch)) {}
|
: impl(new Impl(ch)) {}
|
||||||
|
|
||||||
{% for m in cls.methods %}
|
{% for m in cls.methods %}
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "rpc/RpcChannel.h"
|
#include "rpc/IpcChannel.h"
|
||||||
|
|
||||||
class {{ cls.name }}Proxy {
|
class {{ cls.name }}Proxy {
|
||||||
public:
|
public:
|
||||||
explicit {{ cls.name }}Proxy(RpcChannel& ch);
|
explicit {{ cls.name }}Proxy(IpcChannel& ch);
|
||||||
{% for m in cls.methods %}
|
{% 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 %});
|
{{ m.return_type }} {{ m.name }}({% for a in m.args %}{{ a.type }} {{ a.name }}{% if not loop.last %}, {% endif %}{% endfor %});
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|||||||
Reference in New Issue
Block a user