more work on testMenu
This commit is contained in:
@@ -4,14 +4,17 @@ TestMenu::TestMenu(void* h) {
|
|||||||
handle = h;
|
handle = h;
|
||||||
}
|
}
|
||||||
|
|
||||||
TestMenu::~TestMenu() {}
|
TestMenu::~TestMenu() {
|
||||||
|
std::cout << "TestMenu Destroyed!\n";
|
||||||
|
}
|
||||||
|
|
||||||
void TestMenu::run() {
|
void TestMenu::run() {
|
||||||
|
|
||||||
std::cout << "Your number is: " << num << "\n"
|
std::cout << "Your number is: " << num << "\n"
|
||||||
<< "1. Add 1\n"
|
<< "1. Add 1\n"
|
||||||
<< "2. Subtract 1\n"
|
<< "2. Subtract 1\n"
|
||||||
<< "3. Quit\n\n";
|
<< "3. Unload Module\n\n"
|
||||||
|
<< "4. Quit\n\n";
|
||||||
|
|
||||||
std::cin >> choice;
|
std::cin >> choice;
|
||||||
|
|
||||||
@@ -23,6 +26,9 @@ void TestMenu::run() {
|
|||||||
num--;
|
num--;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
|
App::Get().unload(self);
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
App::Get().end();
|
App::Get().end();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -16,8 +16,4 @@ extern "C" {
|
|||||||
Module* create(void* handle) {
|
Module* create(void* handle) {
|
||||||
return new TestMenu(handle);
|
return new TestMenu(handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
void destroy(Module* m) {
|
|
||||||
delete m;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
22
src/App.cpp
22
src/App.cpp
@@ -20,15 +20,19 @@ App::App(const int& argc, char* argv[]) {
|
|||||||
App::~App() {
|
App::~App() {
|
||||||
|
|
||||||
std::cout << "\nExiting...";
|
std::cout << "\nExiting...";
|
||||||
|
for(auto it = modules.begin(); it != modules.end(); it++) {
|
||||||
|
void* handle = (*it)->getHandle();
|
||||||
|
delete *it;
|
||||||
|
dlclose(handle);
|
||||||
|
modules.erase(it);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void App::run() {
|
void App::run() {
|
||||||
std::cout << "\nTesting...\n";
|
std::cout << "\nTesting...\n";
|
||||||
|
|
||||||
done = modules.empty();
|
|
||||||
|
|
||||||
// Main loop
|
// Main loop
|
||||||
while (!done) {
|
while (!done && !modules.empty()) {
|
||||||
|
|
||||||
for(auto it = modules.begin(); it != modules.end(); it++)
|
for(auto it = modules.begin(); it != modules.end(); it++)
|
||||||
(*it)->run();
|
(*it)->run();
|
||||||
@@ -65,10 +69,22 @@ void App::load(std::string lib) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void App::unload(std::list<Module*>::iterator it) {
|
||||||
|
void* handle = (*it)->getHandle();
|
||||||
|
delete *it;
|
||||||
|
dlclose(handle);
|
||||||
|
modules.erase(it);
|
||||||
|
}
|
||||||
|
|
||||||
void App::handleArgs(const int& argc, char* argv[]) {
|
void App::handleArgs(const int& argc, char* argv[]) {
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
|
if(argc == 0) {
|
||||||
|
printHelp();
|
||||||
|
end();
|
||||||
|
}
|
||||||
|
|
||||||
while(i < argc) {
|
while(i < argc) {
|
||||||
if(strcmp(argv[i], "-h") == 0) {
|
if(strcmp(argv[i], "-h") == 0) {
|
||||||
printHelp();
|
printHelp();
|
||||||
|
|||||||
@@ -12,9 +12,7 @@ class App {
|
|||||||
|
|
||||||
bool done;
|
bool done;
|
||||||
|
|
||||||
std::vector<Module*> modules;
|
std::list<Module*> modules;
|
||||||
std::vector<Module::create_t> mCreators;
|
|
||||||
std::vector<Module::destroy_t> mDestroyers;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
App(const int&, char*[]);
|
App(const int&, char*[]);
|
||||||
@@ -26,11 +24,13 @@ class App {
|
|||||||
|
|
||||||
void load(std::string);
|
void load(std::string);
|
||||||
|
|
||||||
|
void unload(std::list<Module*>::iterator);
|
||||||
|
|
||||||
void handleArgs(const int&, char*[]);
|
void handleArgs(const int&, char*[]);
|
||||||
|
|
||||||
void printHelp();
|
void printHelp();
|
||||||
|
|
||||||
void end() { done = true; };
|
void end() { done = true; }
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -7,16 +7,18 @@ class Module {
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
typedef Module* create_t(void*);
|
typedef Module* create_t(void*);
|
||||||
typedef void destroy_t(Module*);
|
typedef void* destroy_t(Module*);
|
||||||
|
|
||||||
|
|
||||||
virtual ~Module() {}
|
virtual ~Module() {}
|
||||||
virtual void run() = 0;
|
virtual void run() = 0;
|
||||||
std::string getName() const { return name; }
|
std::string getName() const { return name; }
|
||||||
|
void* getHandle() { return handle; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::string name;
|
std::string name;
|
||||||
void* handle;
|
void* handle;
|
||||||
|
std::list<Module*>::iterator self;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <vector>
|
#include <list>
|
||||||
|
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user