help
This commit is contained in:
@@ -107,7 +107,36 @@ namespace Archimedes {
|
||||
|
||||
virtual void startModule(std::variant<std::string, Module*> m) { toOpen.push_back(m); }
|
||||
|
||||
virtual bool onEvent(const Event&) = 0;
|
||||
virtual bool onEvent(const Event& event) {
|
||||
|
||||
unsigned int type = getEventType(event);
|
||||
|
||||
if(type == getEventType(Archimedes::DoLoadModuleEvent())) {
|
||||
|
||||
Archimedes::DoLoadModuleEvent& e = (Archimedes::DoLoadModuleEvent&) event;
|
||||
|
||||
startModule(e.module);
|
||||
|
||||
return true;
|
||||
|
||||
} else if(type == getEventType(Archimedes::DoUnloadModuleEvent())) {
|
||||
|
||||
Archimedes::DoUnloadModuleEvent& e = (Archimedes::DoUnloadModuleEvent&) event;
|
||||
|
||||
stopModule(e.module);
|
||||
|
||||
return true;
|
||||
|
||||
} else if(type == getEventType(Archimedes::LoadModuleEvent())) {
|
||||
|
||||
return true;
|
||||
} else if(type == getEventType(Archimedes::UnloadModuleEvent())) {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void handleEvents() {
|
||||
static bool handled;
|
||||
@@ -129,6 +158,7 @@ namespace Archimedes {
|
||||
}
|
||||
|
||||
if(!handled) {
|
||||
std::cout << "here?\n";
|
||||
if(this->onEvent(*events.front())) {
|
||||
Event* e = events.front();
|
||||
events.pop_front();
|
||||
@@ -173,7 +203,8 @@ namespace Archimedes {
|
||||
|
||||
virtual Module* load(std::string moduleNameOrPath) {
|
||||
Module* m = dynamicLoad(moduleNameOrPath);
|
||||
return m != nullptr ? load(m) : reload(moduleNameOrPath);
|
||||
//return m != nullptr ? load(m) : reload(moduleNameOrPath);
|
||||
return load(m);
|
||||
}
|
||||
|
||||
virtual Module* load(Module* m) {
|
||||
@@ -182,6 +213,8 @@ namespace Archimedes {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
std::cout << "Load: " << (std::string) *m << "1\n";
|
||||
|
||||
void* h = m->getHandle();
|
||||
for(auto it = runOrder.begin(); it != runOrder.end(); it++) {
|
||||
if(*it == static_cast<std::string>(*m)) {
|
||||
@@ -193,10 +226,14 @@ namespace Archimedes {
|
||||
return modules[*it];
|
||||
}
|
||||
}
|
||||
|
||||
std::cout << "Load: " << (std::string) *m << "2\n";
|
||||
|
||||
if(modules.find(*m) == modules.end())
|
||||
modules[*m] = m;
|
||||
|
||||
std::cout << "Load: " << (std::string) *m << "3\n";
|
||||
|
||||
for(auto it = runOrder.begin(); it != runOrder.end(); it++) {
|
||||
|
||||
if(m->deps.find(*it) != m->deps.end()) {
|
||||
@@ -208,6 +245,8 @@ namespace Archimedes {
|
||||
}
|
||||
}
|
||||
|
||||
std::cout << "Load: " << (std::string) *m << "4\n";
|
||||
|
||||
//insert temporarily to avoid circular dependencies
|
||||
runOrder.insert(roInsert, *m);
|
||||
|
||||
@@ -229,12 +268,21 @@ namespace Archimedes {
|
||||
m->moduleInstances[it.first] = load(std::get<Module*>(it.second));
|
||||
}
|
||||
|
||||
std::cout << "Load: " << (std::string) *m << "5\n";
|
||||
|
||||
//reinsert once final order has been reached
|
||||
runOrder.remove(*m);
|
||||
|
||||
std::cout << "Load: " << (std::string) *m << "6\n";
|
||||
|
||||
runOrder.insert(roInsert, *m);
|
||||
|
||||
std::cout << "Load: " << (std::string) *m << "7\n";
|
||||
|
||||
emitEvent(new LoadModuleEvent(*m));
|
||||
|
||||
std::cout << "Load: " << (std::string) *m << "8\n";
|
||||
|
||||
return m;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user