Add built-in server log method.

This commit is contained in:
PabloMK7 2025-03-30 00:44:52 +01:00
parent eca355a496
commit 6f5e8a1c81
2 changed files with 54 additions and 13 deletions

View File

@ -26,6 +26,12 @@ namespace ArticProtocolCommon {
IN_SMALL_BUFFER = 4,
IN_BIG_BUFFER = 5,
};
enum class LogOnServerType : u8 {
LOG_DEBUG = 0,
LOG_INFO = 1,
LOG_WARNING = 2,
LOG_ERROR = 3,
};
struct RequestParameter {
RequestParameterType type;
union {

View File

@ -385,6 +385,41 @@ void ArticProtocolServer::RequestHandler::Serve() {
std::array<char, sizeof(req.reqPacket.method) + 1> methodArray = {0};
memcpy(methodArray.data(), req.reqPacket.method.data(), req.reqPacket.method.size());
MethodInterface mi(req, workBuffer, workBufferSize, accept_fd);
if (strcmp(methodArray.data(), "__log") == 0) {
bool good = true;
s8 log_mode;
void* dataPtr; size_t dataPtrSize;
if (good) good = mi.GetParameterS8(log_mode);
if (good) good = mi.GetParameterBuffer(dataPtr, dataPtrSize);
if (good) good = mi.FinishInputParameters();
if (good) {
std::string str(reinterpret_cast<char*>(dataPtr), dataPtrSize);
switch (static_cast<ArticProtocolCommon::LogOnServerType>(log_mode))
{
case ArticProtocolCommon::LogOnServerType::LOG_DEBUG:
logger.Debug(str.c_str());
break;
case ArticProtocolCommon::LogOnServerType::LOG_INFO:
logger.Info(str.c_str());
break;
case ArticProtocolCommon::LogOnServerType::LOG_WARNING:
logger.Warning(str.c_str());
break;
case ArticProtocolCommon::LogOnServerType::LOG_ERROR:
logger.Error(str.c_str());
break;
default:
break;
}
mi.FinishGood(0);
}
} else {
auto it = ArticFunctions::functionHandlers.find(std::string(methodArray.data()));
if (it == ArticFunctions::functionHandlers.end()) {
respPacket.resp.articResult = ArticProtocolCommon::ResponseMethod::ArticResult::METHOD_NOT_FOUND;
@ -398,8 +433,8 @@ void ArticProtocolServer::RequestHandler::Serve() {
}
logger.Debug("Worker %d: Processing %s (rID %d)", id, methodArray.data(), req.reqPacket.requestID);
MethodInterface mi(req, workBuffer, workBufferSize, accept_fd);
it->second(mi);
}
ArticProtocolCommon::MethodState mState = mi.GetMethodState();
if (mState != ArticProtocolCommon::MethodState::FINISHED) {