bool ConnectionManager::onConnectionHeaderReceived(const ConnectionPtr& conn, const ros::Header& header) { bool ret = false; std::string val; if (header.getValue("topic", val)) { ROSCPP_LOG_DEBUG("Connection: Creating TransportSubscriberLink for topic [%s] connected to [%s]", val.c_str(), conn->getRemoteString().c_str()); TransportSubscriberLinkPtr sub_link(new TransportSubscriberLink()); sub_link->initialize(conn); ret = sub_link->handleHeader(header); } else if (header.getValue("service", val)) { ROSCPP_LOG_DEBUG("Connection: Creating ServiceClientLink for service [%s] connected to [%s]", val.c_str(), conn->getRemoteString().c_str()); ServiceClientLinkPtr link(new ServiceClientLink()); link->initialize(conn); ret = link->handleHeader(header); } else { ROSCPP_LOG_DEBUG("Got a connection for a type other than 'topic' or 'service' from [%s]. Fail.", conn->getRemoteString().c_str()); return false; } return ret; }
void ServiceServerLink::onConnectionDropped(const ConnectionPtr& conn) { ROS_ASSERT(conn == connection_); ROSCPP_LOG_DEBUG("Service client from [%s] for [%s] dropped", conn->getRemoteString().c_str(), service_name_.c_str()); dropped_ = true; clearCalls(); ServiceManager::instance()->removeServiceServerLink(shared_from_this()); }