opengenerals/processor/pc/ProcedureManager.cpp
szdytom fef044743b
Fix pc/pm
Signed-off-by: szdytom <szdytom@qq.com>
2024-02-08 17:57:47 +08:00

40 lines
845 B
C++

#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<byte*>(&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);
}
}