.. _program_listing_file__tmp_ws_src_SMACC2_smacc2_client_library_multirole_sensor_client_include_multirole_sensor_client_client_behaviors_cb_default_multirole_sensor_behavior.hpp: Program Listing for File cb_default_multirole_sensor_behavior.hpp ================================================================= |exhale_lsh| :ref:`Return to documentation for file ` (``/tmp/ws/src/SMACC2/smacc2_client_library/multirole_sensor_client/include/multirole_sensor_client/client_behaviors/cb_default_multirole_sensor_behavior.hpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp // Copyright 2021 RobosoftAI Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #pragma once #include #include #include namespace cl_multirole_sensor { template class CbDefaultMultiRoleSensorBehavior : public smacc2::SmaccClientBehavior { public: typedef typename ClientType::TMessageType TMessageType; ClientType * sensor_; CbDefaultMultiRoleSensorBehavior() { sensor_ = nullptr; } static std::string getEventLabel() { // show ros message type return demangleSymbol(typeid(TMessageType).name()); } std::function deferedEventPropagation; template void onOrthogonalAllocation() { deferedEventPropagation = [this]() { RCLCPP_INFO( getLogger(), "[CbDefaultMultiRoleSensorBehavior] onEntry. Requires client of type '%s'", demangleSymbol().c_str()); // just propagate the client events from this client behavior source. sensor_->onMessageReceived( &CbDefaultMultiRoleSensorBehavior::propagateEvent< EvTopicMessage>, this); sensor_->onFirstMessageReceived( &CbDefaultMultiRoleSensorBehavior::propagateEvent< EvTopicInitialMessage>, this); sensor_->onMessageTimeout( &CbDefaultMultiRoleSensorBehavior::propagateEvent2< EvTopicMessageTimeout>, this); }; } template void propagateEvent(const TMessageType & /*msg*/) { // TODO: copy event concept fields this->postEvent(); } template void propagateEvent2() { this->postEvent(); } void onEntry() override { RCLCPP_INFO( getLogger(), "[CbDefaultMultiRoleSensorBehavior] onEntry. Requires client of type '%s'", demangleSymbol().c_str()); if (sensor_ == nullptr) { this->requiresClient(sensor_); } if (sensor_ == nullptr) { RCLCPP_FATAL_STREAM( getLogger(), "[CbDefaultMultiRoleSensorBehavior]Sensor client behavior needs a client of type: " << demangleSymbol() << " but it is not found."); } else { deferedEventPropagation(); RCLCPP_INFO(getLogger(), "[CbDefaultMultiRoleSensorBehavior] onEntry. sensor initialize"); } } void onExit() {} virtual void onMessageCallback(const TMessageType & /*msg*/) { // empty to fill by sensor customization based on inheritance } }; } // namespace cl_multirole_sensor