Esempio n. 1
0
void EventDispatcher::listen(string event,EventCallback callback,IEventPublisher* publisher){
	//this->listeners[event].insert(pair<IEventPublisher*,vector<EventCallback>(publisher,callback));
	if(isListening(event)){
        if(hasPublisher(event,publisher)){
            this->listeners[event].at(publisher).push_back(callback);
        } else {
            this->listeners[event].insert(pair<IEventPublisher*,vector<EventCallback>>(publisher,{callback}));
        }
	} else {
        this->listeners[event].insert(pair<IEventPublisher*,vector<EventCallback>>(publisher,{callback}));
	}

	g_message("EventDispatcher: Adding event >> %s",event.c_str());
}
Esempio n. 2
0
//Methods
int RosAriaVRep::runNode() {
	ROS_INFO("Running node");
	if(VRepUtils::getObjectHandle(motorEsquerdoObjectHandleName,nodeHandler,signalObjectMap) &&
		VRepUtils::getObjectHandle(motorDireitoObjectHandleName,nodeHandler,signalObjectMap) &&
		VRepUtils::getObjectHandle(pionnerLxObjectHandleName,nodeHandler,signalObjectMap) &&
		VRepUtils::getObjectHandle(laserObjectHandleName,nodeHandler,signalObjectMap) &&
		VRepUtils::getObjectHandle(laserBodyObjectHandleName,nodeHandler,signalObjectMap)) {
			rosaria_v_rep::simRosEnableSubscriber simRosEnableSubscriber =
				createEnableSubscriber(cmdVelTopic,simros_strmcmd_set_twist_command, -1, -1);
			serviceClientsMap[enableSubscriberService].call(simRosEnableSubscriber);
			if(simRosEnableSubscriber.response.subscriberID == -1) {
				infoFailAndExit(cmdVelTopic);
			}

			rosaria_v_rep::simRosEnablePublisher simRosEnablePublisher =
				createEnablePublisher(poseTopic, simros_strmcmd_get_object_pose,
				signalObjectMap[pionnerLxObjectHandleName], poseRelativeToWorld, "");
			serviceClientsMap[enablePublisherService].call(simRosEnablePublisher);
			if(simRosEnablePublisher.response.effectiveTopicName.length() == 0) {
				infoFailAndExit(poseTopic);
			}

			rosaria_v_rep::simRosEnablePublisher simRosEnablePublisher2 =
				createEnablePublisher(laserTopic, simros_strmcmd_get_laser_scanner_data,
				signalObjectMap[laserBodyObjectHandleName], -1, laserVRepSignal);

			serviceClientsMap[enablePublisherService].call(simRosEnablePublisher2);
			if(simRosEnablePublisher2.response.effectiveTopicName.length() == 0) {
				infoFailAndExit(laserTopic);
			}

			std_msgs::Bool boolean;
			boolean.data = true;
			if(hasPublisher(motorStateTopic)) {
				publisherMap[motorStateTopic].publish(boolean);
			} else {
				infoFailAndExit(motorStateTopic);
			}

	} else {
		ROS_ERROR("Failed to get objects from V-Rep simulation. Be sure"
					" that the simulation is running.");
		return	shutdownAndExit();
	}

	ros::spin();
	return shutdownAndExit();
}