Compare commits
2 Commits
c93aea6501
...
43f67275e2
| Author | SHA1 | Date |
|---|---|---|
|
|
43f67275e2 | 2 weeks ago |
|
|
00d359a064 | 2 weeks ago |
@ -0,0 +1,61 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <ipc/IpcMessage.h>
|
||||||
|
#include <rpc/RpcValue.h>
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
// Кодек, который знает, как упаковать/распаковать RPC-запросы/ответы
|
||||||
|
// в/IpcMessage. Живёт в IPC-слое, но опирается на типы RPC-ядра
|
||||||
|
// (RpcValue/RpcArgs).
|
||||||
|
namespace IpcCodec {
|
||||||
|
|
||||||
|
// Запрос: имя метода + вектор аргументов.
|
||||||
|
inline IpcMessage encodeRequest(const std::string& method,
|
||||||
|
const RpcArgs& args) {
|
||||||
|
IpcMessage msg;
|
||||||
|
|
||||||
|
// имя метода
|
||||||
|
msg.add(method);
|
||||||
|
|
||||||
|
// аргументы (PoC: только int)
|
||||||
|
for (const auto& a : args) {
|
||||||
|
msg.add(a.asInt());
|
||||||
|
}
|
||||||
|
|
||||||
|
return msg;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void decodeRequest(const IpcMessage& msg,
|
||||||
|
std::string& method,
|
||||||
|
RpcArgs& args) {
|
||||||
|
IpcMessage copy = msg;
|
||||||
|
|
||||||
|
// имя метода
|
||||||
|
method = copy.get<std::string>();
|
||||||
|
|
||||||
|
// аргументы (PoC: только int, читаем до конца сообщения)
|
||||||
|
args.clear();
|
||||||
|
while (!copy.empty()) {
|
||||||
|
int v = copy.get<int>();
|
||||||
|
args.emplace_back(RpcValue::fromInt(v));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ответ: одно RpcValue (PoC: считаем, что это int).
|
||||||
|
inline IpcMessage encodeResponse(const RpcValue& result) {
|
||||||
|
IpcMessage msg;
|
||||||
|
msg.add(result.asInt()); // PoC: только int
|
||||||
|
return msg;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline RpcValue decodeResponse(const IpcMessage& msg) {
|
||||||
|
IpcMessage copy = msg;
|
||||||
|
int v = copy.get<int>();
|
||||||
|
return RpcValue::fromInt(v);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace IpcCodec
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Loading…
Reference in New Issue