fipa_services
ServiceDirectory.hpp
Go to the documentation of this file.
1 #ifndef FIPA_SERVICES_SERVICE_DIRECTORY_HPP
2 #define FIPA_SERVICES_SERVICE_DIRECTORY_HPP
3 
4 #include <map>
5 #include <set>
6 #include <stdexcept>
7 #include <boost/thread.hpp>
8 #include <fipa_services/ServiceDirectoryEntry.hpp>
9 #include <fipa_services/ErrorHandling.hpp>
10 
11 namespace fipa {
12 namespace services {
13 
19 {
20  // Map of registered services
21  ServiceDirectoryMap mServices;
22  base::Time mTimestamp;
23 
24 protected:
25  // Mutex to guarantee thread-safe operation
26  boost::mutex mMutex;
27 
28 public:
29  typedef boost::shared_ptr<ServiceDirectory> Ptr;
30 
32  virtual ~ServiceDirectory() {}
33 
39  virtual void registerService(const ServiceDirectoryEntry& entry);
40 
46  void deregisterService(const ServiceDirectoryEntry& entry);
47 
53  virtual void deregisterService(const std::string& regex, ServiceDirectoryEntry::Field field = ServiceDirectoryEntry::NAME);
54 
62 
72  virtual ServiceDirectoryList search(const std::string& regex, ServiceDirectoryEntry::Field field = ServiceDirectoryEntry::NAME, bool doThrow = true) const;
73 
79  void modify(const ServiceDirectoryEntry& entry);
80 
84  void updateTimestamp() { mTimestamp = base::Time::now(); }
85 
90  base::Time getTimestamp() const { return mTimestamp; }
91 
97 
107  virtual void mergeSelectively(const ServiceDirectoryList& updateList, ServiceDirectoryEntry::Field selectiveMerge);
108 
109 private:
116  static std::set<std::string> getUniqueFieldValues(const ServiceDirectoryList& list, ServiceDirectoryEntry::Field field);
117 
124  void clearSelectively(const std::string& regex, ServiceDirectoryEntry::Field field);
125 };
126 
127 } // end namespace services
128 } // end namespace fipa
129 #endif // FIPA_SERVICES_SERVICE_DIRECTORY_HPP
Class to describe FIPA service directory.
Definition: ServiceDirectory.hpp:18
Field
Definition: ServiceDirectoryEntry.hpp:33
void deregisterService(const ServiceDirectoryEntry &entry)
Definition: ServiceDirectory.cpp:30
boost::shared_ptr< ServiceDirectory > Ptr
Definition: ServiceDirectory.hpp:29
ServiceDirectory()
Definition: ServiceDirectory.cpp:10
virtual void registerService(const ServiceDirectoryEntry &entry)
Definition: ServiceDirectory.cpp:15
void modify(const ServiceDirectoryEntry &entry)
Definition: ServiceDirectory.cpp:85
ServiceDirectoryList getAll() const
Definition: ServiceDirectory.cpp:98
std::map< Name, ServiceDirectoryEntry > ServiceDirectoryMap
Definition: ServiceDirectoryEntry.hpp:97
virtual void mergeSelectively(const ServiceDirectoryList &updateList, ServiceDirectoryEntry::Field selectiveMerge)
Definition: ServiceDirectory.cpp:112
std::vector< ServiceDirectoryEntry > ServiceDirectoryList
Definition: ServiceDirectoryEntry.hpp:96
virtual ~ServiceDirectory()
Definition: ServiceDirectory.hpp:32
ServiceDirectoryList search(const ServiceDirectoryEntry &entry) const
Definition: ServiceDirectory.cpp:56
The entry definition for a service directory, containing name, type, locator and description.
Definition: ServiceDirectoryEntry.hpp:23
void updateTimestamp()
Definition: ServiceDirectory.hpp:84
Definition: ServiceDirectoryEntry.hpp:33
boost::mutex mMutex
Definition: ServiceDirectory.hpp:26
base::Time getTimestamp() const
Definition: ServiceDirectory.hpp:90
Definition: DistributedServiceDirectory.cpp:5