void DynamicObject::DestroyEventHandlers(void) { while (eventhandlers.size() > 0) { EventHandler *handler = eventhandlers.back(); eventhandlers.pop_back(); handler->DecRef(); } }
Variant DynamicObject::m_RemoveEventHandler(int numargs, Variant args[]) { EventHandler *handler = FindEventHandler(args[0]); if (handler) { UnregisterEventHandler(handler); handler->DecRef(); } return VARNULL; }
int DynamicObject::FireEvent(const char *event) { int rc = 0; EventHandler *handler = FindEventHandler(event); if (handler) { Tls *tls = tlsGet(); tls->object = this; lmbox_free(tls->event); tls->event = strdup(event); systemObject->Log(3, "Executing event handler %s for event %s in %s (run=%d)", handler->GetName(), event, name, systemObject->IsRunning()); rc = handler->Fire(); systemObject->Log(5, "Result is %d in %s from event handler %s for event %s", rc, name, handler->GetName(), event); handler->DecRef(); lmbox_destroy((void**)&tls->event); } return rc; }
void DynamicObject::AddEventHandler(const char *event, const char *code) { char *ename = strdup(event); while (ename) { char *end = strchr(ename, ','); if (end) { *end++ = 0; } Script *script = new Script(ename, code); EventHandler *handler = new EventHandler(ename, script); RegisterEventHandler(handler); handler->DecRef(); ename = end; } free(ename); }