24 #include <aspect/manager.h> 25 #include <aspect/inifins/aspect_provider.h> 26 #include <aspect/inifins/blackboard.h> 27 #include <aspect/inifins/blocked_timing.h> 28 #include <aspect/inifins/clock.h> 29 #include <aspect/inifins/configurable.h> 30 #include <aspect/inifins/fawkes_network.h> 31 #include <aspect/inifins/logger.h> 32 #include <aspect/inifins/logging.h> 33 #include <aspect/inifins/mainloop.h> 34 #include <aspect/inifins/network.h> 35 #include <aspect/inifins/plugin_director.h> 36 #include <aspect/inifins/thread_producer.h> 37 #include <aspect/inifins/time_source.h> 38 #include <aspect/inifins/vision_master.h> 39 #include <aspect/inifins/vision.h> 41 # include <aspect/inifins/webview.h> 44 # include <aspect/inifins/tf.h> 47 # include <aspect/inifins/pointcloud.h> 67 std::map<std::string, AspectIniFin *>::iterator i;
68 for (i = __default_inifins.begin(); i != __default_inifins.end(); ++i) {
71 __default_inifins.clear();
81 throw Exception(
"An initializer for %s has already been registered",
94 throw Exception(
"An initializer for %s has not been registered",
98 throw Exception(
"Threads with the %s aspect are still alive, cannot " 113 return (__threads.find(aspect_name) != __threads.end()) &&
114 (! __threads[aspect_name].empty());
120 Aspect *aspected_thread =
dynamic_cast<Aspect *
>(thread);
121 if (aspected_thread != NULL) {
122 const std::list<const char *> &aspects = aspected_thread->
get_aspects();
124 std::list<const char *> initialized;
127 std::list<const char *>::const_iterator i;
128 for (i = aspects.begin(); i != aspects.end(); ++i) {
129 if (__inifins.find(*i) == __inifins.end()) {
131 "but no initiliazer is known.",
134 __inifins[*i]->init(thread);
135 initialized.push_back(*i);
138 for (i = aspects.begin(); i != aspects.end(); ++i) {
139 __threads[*i].push_back(thread);
142 std::list<const char *>::const_reverse_iterator i;
143 for (i = initialized.rbegin(); i != initialized.rend(); ++i) {
144 __inifins[*i]->finalize(thread);
148 std::list<const char *>::const_reverse_iterator i;
149 for (i = initialized.rbegin(); i != initialized.rend(); ++i) {
150 __inifins[*i]->finalize(thread);
161 Aspect *aspected_thread =
dynamic_cast<Aspect *
>(thread);
162 if (aspected_thread != NULL) {
163 const std::list<const char *> &aspects = aspected_thread->
get_aspects();
165 std::list<const char *>::const_iterator i;
166 for (i = aspects.begin(); i != aspects.end(); ++i) {
167 if (__inifins.find(*i) == __inifins.end()) {
169 "but no finalizer is known.",
172 __inifins[*i]->finalize(thread);
177 for (i = aspects.begin(); i != aspects.end(); ++i) {
178 __threads[*i].remove(thread);
187 Aspect *aspected_thread =
dynamic_cast<Aspect *
>(thread);
188 if (aspected_thread != NULL) {
189 const std::list<const char *> &aspects = aspected_thread->
get_aspects();
191 std::list<const char *>::const_iterator i;
192 for (i = aspects.begin(); i != aspects.end(); ++i) {
193 if (__inifins.find(*i) == __inifins.end()) {
195 "but no finalizer is known.",
241 if (! __default_inifins.empty())
return;
297 std::map<std::string, AspectIniFin *>::iterator i;
298 for (i = __default_inifins.begin(); i != __default_inifins.end(); ++i) {
299 __inifins[i->first] = i->second;
Initializer/finalizer for the BlockedTimingAspect.
Service publisher interface.
virtual void init(Thread *thread)
This method is called by the ThreadManager for each newly added Thread.
Initializer/finalizer for the WebviewAspect.
Initializer/finalizer for the AspectProviderAspect.
Initializer/finalizer for the MainLoopAspect.
Fawkes aspect base class.
Fawkes library namespace.
This is supposed to be the central clock in Fawkes.
Initializer/finalizer for the ConfigurableAspect.
Logger employer The LoggerEmployer shall pipe all log messages of the system to added loggers...
Initializer/finalizer for the LoggerAspect.
Initializer/finalizer for the PointCloudAspect.
virtual ~AspectManager()
Constructor.
Thread class encapsulation of pthreads.
void register_inifin(AspectIniFin *inifin)
Register initializer/finalizer.
void unregister_inifin(AspectIniFin *inifin)
Unregister initializer/finalizer.
Initializer/finalizer for the TimeSourceAspect.
Initializer/finalizer for the NetworkAspect.
Thread cannot be initialized.
Initializer/finalizer for the BlackBoardAspect.
void register_default_inifins(BlackBoard *blackboard, ThreadCollector *collector, Configuration *config, Logger *logger, Clock *clock, FawkesNetworkHub *fnethub, MainLoopEmployer *mloop_employer, LoggerEmployer *logger_employer, BlockedTimingExecutor *btexec, NetworkNameResolver *nnresolver, ServicePublisher *service_publisher, ServiceBrowser *service_browser, PluginManager *pmanager, tf::Transformer *tf_listener)
Register default aspect initializer/finalizer.
Base class for exceptions in Fawkes.
const char * name() const
Get name of thread.
virtual bool prepare_finalize(Thread *thread)
Prepare finalization of a thread.
Initializer/finalizer for the ThreadProducerAspect.
bool has_threads_for_aspect(const char *aspect_name)
Check if threads for a particular aspect still exist.
Initializer/finalizer for the ClockAspect.
Main loop employer The MainLoopEmployer calls the main loop for execution.
const std::list< const char * > & get_aspects() const
Get list of aspect names attached to a aspected thread.
Network name and address resolver.
const char * get_aspect_name() const
Get aspect name.
Initializer/finalizer for the FawkesNetworkAspect.
Thread cannot be finalized.
Initializer/finalizer for the VisionAspect.
The BlackBoard abstract class.
Initializer/finalizer for the PluginDirectorAspect.
virtual void finalize(Thread *thread)
Finalize a thread.
Interface for configuration handling.
Initializer/finalizer for the LoggingAspect.
void append(const char *format,...)
Append messages to the message list.
Initializer/finalizer for the VisionMasterAspect.
Aspect initializer/finalizer base class.