00001 // -*- C++ -*- 00019 #ifndef RTC_LOCALSERVICEADMIN_H 00020 #define RTC_LOCALSERVICEADMIN_H 00021 00022 #include <coil/Mutex.h> 00023 #include <coil/Factory.h> 00024 #include <coil/Singleton.h> 00025 00026 #include <rtm/idl/SDOPackageStub.h> 00027 #include <rtm/SystemLogger.h> 00028 #include <rtm/LocalServiceBase.h> 00029 00030 namespace RTM 00031 { 00032 // forward decl 00033 class LocalServiceBase; 00034 typedef LocalServiceBase* (*ECNewFunc)(); 00035 typedef void (*ECDeleteFunc)(LocalServiceBase* ls); 00036 typedef coil::Guard<coil::Mutex> Guard; 00037 00060 class LocalServiceAdmin 00061 : public coil::Singleton<LocalServiceAdmin> 00062 { 00063 public: 00079 LocalServiceAdmin(); 00080 00096 virtual ~LocalServiceAdmin(); 00097 00113 void init(coil::Properties& props); 00114 00130 void finalize(); 00131 00147 ::RTM::LocalServiceProfileList getServiceProfiles(); 00148 00175 bool getServiceProfile(std::string name, 00176 ::RTM::LocalServiceProfile& prof); 00177 00204 ::RTM::LocalServiceBase* getService(const char* id); 00205 00219 bool addLocalService(::RTM::LocalServiceBase* service); 00220 00234 bool removeLocalService(const std::string name); 00235 00236 private: 00244 bool isEnabled(const std::string& id, const coil::vstring& enabled); 00245 00253 bool notExisting(const std::string& id); 00254 00262 std::vector<LocalServiceBase*> m_services; 00263 coil::Mutex m_services_mutex; 00264 00272 ::RTC::Logger rtclog; 00273 }; 00274 }; // RTM 00275 00276 #endif // RTC_LOCALSERVICEADMIN_H