summaryrefslogtreecommitdiff
path: root/core/events.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/events.cpp')
-rw-r--r--core/events.cpp71
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:
}