Program Listing for File PDJE_Judge.cpp
↰ Return to documentation for file (include/judge/PDJE_Judge.cpp)
#include "PDJE_Judge.hpp"
#include "PDJE_LOG_SETTER.hpp"
#include "PDJE_Note_OBJ.hpp"
#include <atomic>
#include <thread>
#include <unordered_map>
namespace PDJE_JUDGE {
JUDGE::JUDGE()
{
startlog();
}
JUDGE_STATUS
JUDGE::Start()
{
if (!inits.coreline.has_value()) {
warnlog("failed to start pdje judge module. core line is missing. "
"please connect core data line.");
return JUDGE_STATUS::CORE_LINE_IS_MISSING;
}
if (!inits.inputline.has_value()) {
warnlog("failed to start pdje judge module. input line is missing. "
"please connext input data line.");
return JUDGE_STATUS::INPUT_LINE_IS_MISSING;
}
if (!inits.note_objects.has_value()) {
warnlog("failed to start pdje judge module. could't find any note "
"objects. please check Note object collector again.");
return JUDGE_STATUS::NOTE_OBJECT_IS_MISSING;
}
if (!inits.ev_rule.has_value()) {
warnlog("failed to start pdje judge module. event rule is empty. you "
"should add miss/use range. the range is microsecond. better "
"check again.");
return JUDGE_STATUS::EVENT_RULE_IS_EMPTY;
}
if (inits.dev_rules.empty()) {
warnlog("failed to start pdje judge module. no input device added. you "
"should connect input device. check SetInputRule function.");
return JUDGE_STATUS::INPUT_RULE_IS_EMPTY;
}
inits.note_objects->Sort();
loop.emplace([this]() {
loop_obj.emplace(inits);
loop_obj->loop_switch = true;
loop_obj->StartEventLoop();
loop_obj->loop();
});
return JUDGE_STATUS::OK;
}
JUDGE_STATUS
JUDGE::CheckStatus()
{
return status;
}
void
JUDGE::End()
{
loop_obj->loop_switch = false;
loop_obj->EndEventLoop();
loop->join();
inits.coreline.reset();
inits.inputline.reset();
inits.note_objects.reset();
inits.ev_rule.reset();
inits.dev_rules.clear();
}
}; // namespace PDJE_JUDGE