implement object registry
This commit is contained in:
+17
-6
@@ -16,11 +16,22 @@ int main() {
|
||||
// и читает из fifo, в который пишет сервер (fifo_to_client).
|
||||
IpcPipeChannel ch("/tmp/fifo_to_client", "/tmp/fifo_to_server");
|
||||
|
||||
// RPC‑уровень: создаём IpcMarshaller поверх канала и передаём его в прокси.
|
||||
IpcMarshaller marshaller(ch);
|
||||
MyServiceProxy<IpcMarshaller> proxy(marshaller);
|
||||
// RPC‑уровень: создаём два маршаллера с разными ObjectId и два прокси.
|
||||
// По договорённости на сервере:
|
||||
// ObjectId = 0 -> первый MyService
|
||||
// ObjectId = 1 -> второй MyService
|
||||
IpcMarshaller m1(ch, 0);
|
||||
IpcMarshaller m2(ch, 1);
|
||||
MyServiceProxy<IpcMarshaller> obj1(m1);
|
||||
MyServiceProxy<IpcMarshaller> obj2(m2);
|
||||
|
||||
proxy.add(7, 9);
|
||||
int counter = proxy.get();
|
||||
std::cout << "RESULT: " << counter << std::endl;
|
||||
// obj1 увеличивает свой счётчик.
|
||||
obj1.add(7, 9);
|
||||
|
||||
// obj2 увеличивает счётчик на текущее значение счётчика obj1.
|
||||
obj2.add(0, obj1.get());
|
||||
|
||||
int c1 = obj1.get();
|
||||
int c2 = obj2.get();
|
||||
std::cout << "OBJ1: " << c1 << " OBJ2: " << c2 << std::endl;
|
||||
}
|
||||
|
||||
+15
-4
@@ -4,6 +4,7 @@
|
||||
#include "ipc/IpcPipeChannel.h"
|
||||
#include "ipc/IpcDispatcher.h"
|
||||
#include "rpc/RpcInvoker.h"
|
||||
#include "rpc/RpcRegistry.h"
|
||||
|
||||
#include <sys/stat.h>
|
||||
|
||||
@@ -16,10 +17,20 @@ int main() {
|
||||
// Сервер читает из fifo_to_server и пишет в fifo_to_client.
|
||||
IpcPipeChannel ch("/tmp/fifo_to_server", "/tmp/fifo_to_client");
|
||||
|
||||
// RPC‑уровень: инвокер и скелет, который лишь регистрирует методы.
|
||||
RpcInvoker invoker;
|
||||
MyService realObj;
|
||||
MyServiceSkeleton skeleton(realObj, invoker);
|
||||
// RPC‑уровень: реестр объектов и инвокер, который знает, как их вызывать.
|
||||
RpcRegistry registry;
|
||||
RpcInvoker invoker(registry);
|
||||
|
||||
// PoC: создаём два "реальных" объекта и оборачиваем их в Skeleton'ы,
|
||||
// которыми владеет RpcRegistry.
|
||||
MyService obj1;
|
||||
MyService obj2;
|
||||
RpcRegistry::ObjectId id1 =
|
||||
registry.registerObject<MyServiceSkeleton>(obj1); // id1 == 0
|
||||
RpcRegistry::ObjectId id2 =
|
||||
registry.registerObject<MyServiceSkeleton>(obj2); // id2 == 1
|
||||
(void)id1;
|
||||
(void)id2;
|
||||
|
||||
// IPC‑диспетчер, который декодирует IpcMessage в RPC-вызовы и обратно.
|
||||
IpcDispatcher dispatcher(ch, invoker);
|
||||
|
||||
Reference in New Issue
Block a user