diff options
Diffstat (limited to 'core/events.cpp')
-rw-r--r-- | core/events.cpp | 71 |
1 files changed, 66 insertions, 5 deletions
diff --git a/core/events.cpp b/core/events.cpp index 58e6b24..d858696 100644 --- a/core/events.cpp +++ b/core/events.cpp @@ -15,13 +15,74 @@ * along with evil_core. If not, see <http://www.gnu.org/licenses/>.*/ #include "commonheaders.h" -#include <boost/signal.hpp> -bool RegisterEventHandler(void* func) +extern std::list<evt_handler*> event_handlers; +extern boost::mutex event_handlers_mutex; + + +const int evt_handler::getType() +{ + return evt_type; +} + +evt_handler::evt_handler(int type) +{ + evt_type = type; +} + +void evt_handler::AddHandler(EVENT_HANDLER add_handler) { - return false; + handler.connect(add_handler); } -bool RegisterEventType(int type) +void* evt_handler::Execute(void* data) +{ + return handler(data); +} + +bool RegisterEventHandler(int type, EVENT_HANDLER func) +{ + if(!event_handlers.empty()) + { + event_handlers_mutex.lock(); + std::list<evt_handler*>::iterator end = event_handlers.end(); + for(std::list<evt_handler*>::iterator i = event_handlers.begin(); i != end; ++i) + { + if((*i)->getType() == type) + { + (*i)->AddHandler(func); + } + } + } + return true; +} +void* RegisterEventType(int type) +{ + if(!event_handlers.empty()) + { + event_handlers_mutex.lock(); + std::list<evt_handler*>::iterator end = event_handlers.end(); + for(std::list<evt_handler*>::iterator i = event_handlers.begin(); i != end; ++i) + { + if((*i)->getType() == type) + return (void*)-1; + } + } + event_handlers.push_back(new evt_handler(type)); + return 0; +} + +void* ExecuteEvent(int type,void* data) { - return false; + if(!event_handlers.empty()) + { + event_handlers_mutex.lock(); + std::list<evt_handler*>::iterator end = event_handlers.end(); + for(std::list<evt_handler*>::iterator i = event_handlers.begin(); i != end; ++i) + { + if((*i)->getType() == type) + return (*i)->Execute(data); + } + } + event_handlers.push_back(new evt_handler(type)); +// return (void*)&event_handlers.back()->Execute; TODO: } |