00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef ROSCPP_SERVICE_MANAGER_H
00029 #define ROSCPP_SERVICE_MANAGER_H
00030
00031 #include "forwards.h"
00032 #include "common.h"
00033 #include "advertise_service_options.h"
00034 #include "service_client_options.h"
00035
00036 #include <boost/thread/mutex.hpp>
00037 #include <boost/thread/recursive_mutex.hpp>
00038
00039 namespace ros
00040 {
00041
00042 class ServiceManager;
00043 typedef boost::shared_ptr<ServiceManager> ServiceManagerPtr;
00044
00045 class PollManager;
00046 typedef boost::shared_ptr<PollManager> PollManagerPtr;
00047
00048 class XMLRPCManager;
00049 typedef boost::shared_ptr<XMLRPCManager> XMLRPCManagerPtr;
00050
00051 class ConnectionManager;
00052 typedef boost::shared_ptr<ConnectionManager> ConnectionManagerPtr;
00053
00054 class ROSCPP_DECL ServiceManager
00055 {
00056 public:
00057 static const ServiceManagerPtr& instance();
00058
00059 ServiceManager();
00060 ~ServiceManager();
00061
00072 ServicePublicationPtr lookupServicePublication(const std::string& service);
00073
00083 ServiceServerLinkPtr createServiceServerLink(const std::string& service,
00084 bool persistent,
00085 const std::string& request_md5sum, const std::string& response_md5sum,
00086 const M_string& header_values);
00087
00092 void removeServiceServerLink(const ServiceServerLinkPtr& client);
00093
00100 bool lookupService(const std::string& name, std::string& serv_host, uint32_t& serv_port);
00101
00116 bool unadvertiseService(const std::string& serv_name);
00117
00118 bool advertiseService(const AdvertiseServiceOptions& ops);
00119
00120 void start();
00121 void shutdown();
00122 private:
00123
00124 bool isServiceAdvertised(const std::string& serv_name);
00125 bool unregisterService(const std::string& service);
00126
00127 bool isShuttingDown() { return shutting_down_; }
00128
00129 L_ServicePublication service_publications_;
00130 boost::mutex service_publications_mutex_;
00131
00132 L_ServiceServerLink service_server_links_;
00133 boost::mutex service_server_links_mutex_;
00134
00135 volatile bool shutting_down_;
00136 boost::recursive_mutex shutting_down_mutex_;
00137
00138 PollManagerPtr poll_manager_;
00139 ConnectionManagerPtr connection_manager_;
00140 XMLRPCManagerPtr xmlrpc_manager_;
00141 };
00142
00143 }
00144
00145 #endif // ROSCPP_SERVICE_MANAGER_H