示例#1
0
void DynamicObject::DestroyEventHandlers(void)
{
    while (eventhandlers.size() > 0) {
        EventHandler *handler = eventhandlers.back();
        eventhandlers.pop_back();
        handler->DecRef();
    }
}
示例#2
0
Variant DynamicObject::m_RemoveEventHandler(int numargs, Variant args[])
{
    EventHandler *handler = FindEventHandler(args[0]);
    if (handler) {
        UnregisterEventHandler(handler);
        handler->DecRef();
    }
    return VARNULL;
}
示例#3
0
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;
}
示例#4
0
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);
}