#include "ProcedureManager.h" ProcedureManager::ProcedureManager() {} struct ProcedureCallHeader { uint64_t rd; int32_t method; uint32_t len; }; struct ProcedureReturnHeader { uint64_t rd; uint32_t len; }; void ProcedureManager::handleCall(FILE *in, FILE *out) const { ProcedureCallHeader header; auto ptr = reinterpret_cast(&header); std::size_t sz = 0; while (sz < sizeof(header)) sz += fread(ptr + sz, 1, sizeof(header) - sz, in); auto buf = new byte[header.len]; sz = 0; while (sz < header.len) sz += fread(buf + sz, 1, header.len - sz, in); BinaryBuffer bb(header.len, buf); delete[] buf; if (procedures.count(header.method)) { auto res = procedures.at(header.method)(bb); ProcedureReturnHeader rh; rh.rd = header.rd; rh.len = header.len; fwrite(&rh, 1, sizeof(rh), out); res.writeTo(out); } }