message_manager.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include <blackboard/internal/message_manager.h>
00025 #include <blackboard/internal/interface_manager.h>
00026 #include <blackboard/internal/notifier.h>
00027 #include <blackboard/exceptions.h>
00028
00029 #include <interface/message.h>
00030 #include <interface/interface.h>
00031
00032 #include <core/exceptions/software.h>
00033 #include <utils/logging/liblogger.h>
00034
00035 namespace fawkes {
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047 BlackBoardMessageManager::BlackBoardMessageManager(BlackBoardNotifier *notifier)
00048 {
00049 __im = NULL;
00050 __notifier = notifier;
00051 }
00052
00053
00054
00055 BlackBoardMessageManager::~BlackBoardMessageManager()
00056 {
00057 }
00058
00059
00060 void
00061 BlackBoardMessageManager::transmit(Message *message)
00062 {
00063 if ( __im == NULL ) {
00064 throw NullPointerException("InterfaceManager has not been set for MessageManager");
00065 }
00066 try {
00067 Interface *writer = __im->writer_for_mem_serial(message->recipient());
00068 if (__notifier->notify_of_message_received(writer, message)) {
00069 message->ref();
00070 writer->msgq_append(message);
00071 }
00072 } catch (BlackBoardNoWritingInstanceException &e) {
00073 Interface *iface = message->interface();
00074 LibLogger::log_warn("BlackBoardMessageManager", "Cannot transmit message from sender %s "
00075 "via interface %s (type %s), no writing "
00076 "instance exists!",
00077 message->sender_thread_name(),
00078 (iface != NULL) ? iface->id() : "Unknown",
00079 (iface != NULL) ? iface->type() : "unknown");
00080 throw;
00081 }
00082 }
00083
00084
00085
00086
00087
00088 void
00089 BlackBoardMessageManager::set_interface_manager(BlackBoardInterfaceManager *im)
00090 {
00091 __im = im;
00092 }
00093
00094 }