51 lines
1008 B
C++
51 lines
1008 B
C++
#include "hiisi.h"
|
|
#include "heload/heload.h"
|
|
|
|
#include <assert.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <dlfcn.h>
|
|
#include <link.h>
|
|
#include <signal.h>
|
|
#include <atomic>
|
|
|
|
std::atomic<bool> reload_requested(false);
|
|
|
|
void reload_signal_handler(int) {
|
|
reload_requested = true;
|
|
}
|
|
|
|
void reload_modules() {
|
|
if (he_reload_module("libhiisi-engine.so") != 0) {
|
|
fprintf(stderr, "Failed to reload libhiisi-engine.so. Exiting.\n");
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
}
|
|
|
|
int main(int argc, char **argv) {
|
|
|
|
signal(SIGUSR1, reload_signal_handler);
|
|
|
|
if (he_init() != 0) {
|
|
fprintf(stderr, "Failed to initialize heload. Exiting.\n");
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
|
|
he_print_module_infos();
|
|
|
|
hiisi::EngineData state;
|
|
|
|
hiisi::init(&state, argc, argv);
|
|
while (hiisi::event(&state)) {
|
|
hiisi::iterate(&state);
|
|
if (reload_requested) {
|
|
reload_modules();
|
|
reload_requested = false;
|
|
}
|
|
}
|
|
|
|
he_deinit();
|
|
|
|
return 0;
|
|
}
|