opengenerals/processor/pc/ProcedureManager.cpp
szdytom 6b0875ee34
complete ProcedureManager
Signed-off-by: szdytom <szdytom@qq.com>
2024-02-04 15:55:43 +08:00

25 lines
595 B
C++

#include "ProcedureManager.h"
ProcedureManager::ProcedureManager() {}
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);
res.writeTo(out);
}
}