Exemplo n.º 1
0
void CallbackMainDispatcher::run(){

	while(!d->stopEvent->isSignaled()){
		if (!d->eventHandler.waitForAny()) {
			continue;
		}

		if(d->generalCallbackEvent->isSignaled()){
			EventDataRef eventData = d->generalCallbackEvent->takeSignal();

			CallbackData *cbd = dynamic_cast<CallbackData *>(eventData.get());
			if (!cbd) {
				continue;
			}
			TelldusCore::MutexLocker locker(&d->mutex);
			for(CallbackList::iterator callback_it = d->callbackList.begin(); callback_it != d->callbackList.end(); ++callback_it) {
				if ( (*callback_it)->type == cbd->type ) {
					std::tr1::shared_ptr<TelldusCore::TDEventDispatcher> ptr(new TelldusCore::TDEventDispatcher(eventData, *callback_it, d->janitor));
					d->eventThreadList.push_back(ptr);
				}
			}
		}
		if (d->janitor->isSignaled()) {
			//Clear all of them if there is more than one
			while(d->janitor->isSignaled()) {
				d->janitor->popSignal();
			}
			this->cleanupCallbacks();
		}
	}
}
Exemplo n.º 2
0
void TDRawDeviceEventDispatcher::execute(EventDataRef eventData) {
    RawDeviceEventCallbackData *data = dynamic_cast<RawDeviceEventCallbackData *>(eventData.get());
    if (!data) {
        return;
    }
    ((TDRawDeviceEvent)d->func)(data->data.c_str(), data->controllerId, d->id, d->context);
}
Exemplo n.º 3
0
void TDDeviceEventDispatcher::execute(EventDataRef eventData) {
    DeviceEventCallbackData *data = dynamic_cast<DeviceEventCallbackData *>(eventData.get());
    if (!data) {
        return;
    }
    ((TDDeviceEvent)d->func)(data->deviceId, data->deviceState, data->deviceStateValue.c_str(), d->id, d->context);
}
Exemplo n.º 4
0
void TDControllerEventDispatcher::execute(EventDataRef eventData) {
    ControllerEventCallbackData *data = dynamic_cast<ControllerEventCallbackData *>(eventData.get());
    if (!data) {
        return;
    }
    ((TDControllerEvent)d->func)(data->controllerId, data->changeEvent, data->changeType, data->newValue.c_str(), d->id, d->context);
}
Exemplo n.º 5
0
void TDSensorEventDispatcher::execute(EventDataRef eventData) {
    SensorEventCallbackData *data = dynamic_cast<SensorEventCallbackData *>(eventData.get());
    if (!data) {
        return;
    }
    ((TDSensorEvent)d->func)(data->protocol.c_str(), data->model.c_str(), data->id, data->dataType, data->value.c_str(), data->timestamp, d->id, d->context);
}
Exemplo n.º 6
0
void TDDeviceChangeEventDispatcher::execute(EventDataRef eventData) {
    DeviceChangeEventCallbackData *data = dynamic_cast<DeviceChangeEventCallbackData *>(eventData.get());
    if (!data) {
        return;
    }
    ((TDDeviceChangeEvent)d->func)(data->deviceId, data->changeEvent, data->changeType, d->id, d->context);
}