Files
xrbx/include/xrbx/engine/scheduler.h
T

51 lines
1.8 KiB
C++

#pragma once
#include <cstdint>
#include <stdexcept>
#include <string>
#include <vector>
#include <windows.h>
#include <iostream>
#include "offsets.h"
#include "../process.h"
#include "instance.h"
#include "xrbx/engine/common.h"
namespace RBX {
class Scheduler : public InternalObjectWrapper {
public:
class Job : public InternalObjectWrapper {
public:
Job(BYTE *va, const Process &process) : InternalObjectWrapper(va, process) {}
inline std::string getName() const {
BYTE *name_ptr = VA() + OFF_JOB_NAME;
uint64_t length = process().read<uint64_t>(name_ptr + 8);
std::string name(length, '\0');
process().readBytes(process().read<BYTE *>(name_ptr), (BYTE *)name.data(), length);
name[length] = 0;
return name;
}
inline Instance getRunService() {
return Instance(process().read<BYTE *>(VA() + OFF_JOB_RUNSERVICE), process());
}
};
Scheduler(BYTE *va, const Process &process) : InternalObjectWrapper(va, process) {}
inline std::vector<Job> getJobs() const {
return process().readVector<Job>(VA() + OFF_SCHEDULER_JOBS);
}
Job getJob(const std::string &name) const {
auto j = process().readVectorElement<Job>(VA() + OFF_SCHEDULER_JOBS, [&name](const Job &job) -> bool {
return job.getName() == name;
});
if (!j.has_value()) throw std::runtime_error(std::format("Job '{}' not found", name));
return j.value();
}
};
}