rename RpcClient to ProxyMarshaller

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

@ -29,7 +29,7 @@ project/
│   ├── IpcMessage.h # типизированное IPCсообщение (add<T>/get<T>) │   ├── IpcMessage.h # типизированное IPCсообщение (add<T>/get<T>)
│   ├── IpcPipeChannel.h# реализация RpcChannel поверх FIFO │   ├── IpcPipeChannel.h# реализация RpcChannel поверх FIFO
│   ├── RpcChannel.h # абстрактный канал для RPC │   ├── RpcChannel.h # абстрактный канал для RPC
│   ├── RpcClient.h # клиентское ядро RPC (call<Ret>(method, args...)) │   ├── ProxyMarshaller.h # клиентское ядро RPC (call<Ret>(method, args...))
│   └── RpcInvoker.h # серверное ядро RPC (dispatch) │   └── RpcInvoker.h # серверное ядро RPC (dispatch)
├── tools ├── tools
│ ├── generate_rpc.py │ ├── generate_rpc.py
@ -53,10 +53,10 @@ project/
* `IpcChannel` — абстракция транспорта: `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` и читает ответ. * `ProxyMarshaller` — собирает `IpcMessage` из имени метода и аргументов, отправляет через `RpcChannel` и читает ответ.
* `RpcInvoker` — по имени метода (первое поле сообщения) находит зарегистрированную функцию-член и вызывает её, читая аргументы через `get<T>()`. * `RpcInvoker` — по имени метода (первое поле сообщения) находит зарегистрированную функцию-член и вызывает её, читая аргументы через `get<T>()`.
* **Сгенерированные обёртки**: * **Сгенерированные обёртки**:
* `*.proxy.*` — используют `RpcClient` и `RpcChannel`, не зависят от конкретного транспорта. * `*.proxy.*` — используют `ProxyMarshaller` и `RpcChannel`, не зависят от конкретного транспорта.
* `*.skeleton.*` — используют `RpcInvoker` и принимают/возвращают `IpcMessage` для диспетчеризации вызовов. * `*.skeleton.*` — используют `RpcInvoker` и принимают/возвращают `IpcMessage` для диспетчеризации вызовов.
--- ---

@ -2,9 +2,9 @@
#include "IpcChannel.h" #include "IpcChannel.h"
class RpcClient { class ProxyMarshaller {
public: public:
explicit RpcClient(IpcChannel& ch) : channel(ch) {} explicit ProxyMarshaller(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) {

@ -1,12 +1,12 @@
#include "{{ cls.name }}.proxy.h" #include "{{ cls.name }}.proxy.h"
#include "rpc/RpcClient.h" #include "rpc/ProxyMarshaller.h"
class {{ cls.name }}Proxy::Impl { class {{ cls.name }}Proxy::Impl {
public: public:
explicit Impl(IpcChannel& ch) explicit Impl(IpcChannel& ch)
: client(ch) {} : client(ch) {}
RpcClient client; ProxyMarshaller client;
}; };
{{ cls.name }}Proxy::{{ cls.name }}Proxy(IpcChannel& ch) {{ cls.name }}Proxy::{{ cls.name }}Proxy(IpcChannel& ch)

Loading…
Cancel
Save