Fawkes API  Fawkes Development Version
fawkes::BlackBoardInterfaceManager Class Reference

BlackBoard interface manager. More...

#include <>>

Inheritance diagram for fawkes::BlackBoardInterfaceManager:

Public Member Functions

 BlackBoardInterfaceManager (BlackBoardMemoryManager *bb_memmgr, BlackBoardMessageManager *bb_msgmgr, BlackBoardNotifier *bb_notifier)
 Constructor. More...
 
virtual ~BlackBoardInterfaceManager ()
 Destructor. More...
 
Interfaceopen_for_reading (const char *interface_type, const char *identifier, const char *owner=NULL)
 Open interface for reading. More...
 
Interfaceopen_for_writing (const char *interface_type, const char *identifier, const char *owner=NULL)
 Open interface for writing. More...
 
void close (Interface *interface)
 Close interface. More...
 
InterfaceInfoListlist_all () const
 Get a list of interfaces. More...
 
InterfaceInfoListlist (const char *type_pattern, const char *id_pattern) const
 Get a constrained list of interfaces. More...
 
std::list< Interface * > open_multiple_for_reading (const char *type_pattern, const char *id_pattern="*", const char *owner=NULL)
 Open all interfaces of the given type for reading. More...
 
virtual bool exists_writer (const Interface *interface) const
 Check if a writer exists for the given interface. More...
 
virtual unsigned int num_readers (const Interface *interface) const
 Get number of readers. More...
 
virtual void notify_of_data_change (const Interface *interface)
 Notify of data change. More...
 
virtual std::list< std::string > readers (const Interface *interface) const
 Get owners of interfaces who opened for reading. More...
 
virtual std::string writer (const Interface *interface) const
 Get writer of interface. More...
 
std::list< std::string > readers (const std::string &uid) const
 Get owners of interfaces who opened for reading. More...
 
std::string writer (const std::string &uid) const
 Get writer of interface. More...
 
- Public Member Functions inherited from fawkes::InterfaceMediator
virtual ~InterfaceMediator ()
 Virtual destructor. More...
 

Friends

class BlackBoardMessageManager
 

Detailed Description

BlackBoard interface manager.

This class is used by the BlackBoard to manage interfaces stored in the shared memory.

Author
Tim Niemueller

Definition at line 47 of file interface_manager.h.

Constructor & Destructor Documentation

◆ BlackBoardInterfaceManager()

fawkes::BlackBoardInterfaceManager::BlackBoardInterfaceManager ( BlackBoardMemoryManager bb_memmgr,
BlackBoardMessageManager bb_msgmgr,
BlackBoardNotifier bb_notifier 
)

Constructor.

The shared memory segment is created with data from bbconfig.h.

Parameters
bb_memmgrBlackBoard memory manager to use
bb_msgmgrBlackBoard message manager to use
bb_notifierBlackBoard notifier to all for events
See also
bbconfig.h

Definition at line 67 of file interface_manager.cpp.

◆ ~BlackBoardInterfaceManager()

Member Function Documentation

◆ close()

◆ exists_writer()

bool fawkes::BlackBoardInterfaceManager::exists_writer ( const Interface interface) const
virtual

Check if a writer exists for the given interface.

Parameters
interfaceinterface to check
Returns
true, if there is any writer for the given interface, false otherwise

Implements fawkes::InterfaceMediator.

Definition at line 652 of file interface_manager.cpp.

◆ list()

InterfaceInfoList * fawkes::BlackBoardInterfaceManager::list ( const char *  type_pattern,
const char *  id_pattern 
) const

Get a constrained list of interfaces.

Parameters
type_patterntyoe pattern, may contain shell-like wildcards * (any number of characters) and ? (one character), cf. man fnmatch().
id_patternID pattern, may contain shell-like wildcards * (any number of characters) and ? (one character), cf. man fnmatch().
Returns
list of currently existing interfaces matching the given type and ID patterns. List may be outdated on return since there maybe concurrent actions.

Definition at line 574 of file interface_manager.cpp.

References fawkes::InterfaceInfoList::append(), fawkes::BlackBoardMemoryManager::begin(), fawkes::BlackBoardMemoryManager::end(), fawkes::interface_header_t::flag_writer_active, fawkes::interface_header_t::hash, fawkes::interface_header_t::id, fawkes::BlackBoardMemoryManager::lock(), fawkes::interface_header_t::num_readers, readers(), fawkes::interface_header_t::serial, fawkes::Interface::interface_data_ts_t::timestamp_sec, fawkes::Interface::interface_data_ts_t::timestamp_usec, fawkes::interface_header_t::type, fawkes::BlackBoardMemoryManager::unlock(), and writer().

Referenced by fawkes::LocalBlackBoard::list().

◆ list_all()

◆ notify_of_data_change()

void fawkes::BlackBoardInterfaceManager::notify_of_data_change ( const Interface interface)
virtual

Notify of data change.

Notify all subscribers of the given interface of a data change. This also influences logging and sending data over the network so it is mandatory to call this function! The interface base class write method does that for you.

Parameters
interfaceinterface whose subscribers to notify
See also
Interface::write()

Implements fawkes::InterfaceMediator.

Definition at line 645 of file interface_manager.cpp.

References fawkes::BlackBoardNotifier::notify_of_data_change().

◆ num_readers()

unsigned int fawkes::BlackBoardInterfaceManager::num_readers ( const Interface interface) const
virtual

Get number of readers.

Get the number of readers that the given interface has.

Parameters
interfaceinterface to check
Returns
number of readers currently registered for the given interface.

Implements fawkes::InterfaceMediator.

Definition at line 659 of file interface_manager.cpp.

References fawkes::interface_header_t::num_readers.

◆ open_for_reading()

Interface * fawkes::BlackBoardInterfaceManager::open_for_reading ( const char *  type,
const char *  identifier,
const char *  owner = NULL 
)

Open interface for reading.

This will create a new interface instance of the given type. The result can be casted to the appropriate type.

Parameters
typetype of the interface
identifieridentifier of the interface
ownername of entity which opened this interface. If using the BlackBoardAspect to access the blackboard leave this untouched unless you have a good reason.
Returns
new fully initialized interface instance of requested type
Exceptions
OutOfMemoryExceptionthrown if there is not enough free space for the requested interface.

Definition at line 253 of file interface_manager.cpp.

References fawkes::interface_header_t::hash, fawkes::Interface::hash(), fawkes::Interface::hash_size(), fawkes::Mutex::lock(), fawkes::BlackBoardMemoryManager::lock(), fawkes::BlackBoardNotifier::notify_of_interface_created(), fawkes::BlackBoardNotifier::notify_of_reader_added(), fawkes::interface_header_t::num_readers, fawkes::interface_header_t::refcount, fawkes::interface_header_t::serial, fawkes::Interface::serial(), fawkes::Interface::uid(), fawkes::Mutex::unlock(), and fawkes::BlackBoardMemoryManager::unlock().

Referenced by fawkes::LocalBlackBoard::open_for_reading().

◆ open_for_writing()

Interface * fawkes::BlackBoardInterfaceManager::open_for_writing ( const char *  type,
const char *  identifier,
const char *  owner = NULL 
)

Open interface for writing.

This will create a new interface instance of the given type. The result can be casted to the appropriate type. This will only succeed if there is not already a writer for the given interface type/id!

Parameters
typetype of the interface
identifieridentifier of the interface
ownername of entity which opened this interface. If using the BlackBoardAspect to access the blackboard leave this untouched unless you have a good reason.
Returns
new fully initialized interface instance of requested type
Exceptions
OutOfMemoryExceptionthrown if there is not enough free space for the requested interface.
BlackBoardWriterActiveExceptionthrown if there is already a writing instance with the same type/id

Definition at line 417 of file interface_manager.cpp.

References fawkes::interface_header_t::flag_writer_active, fawkes::interface_header_t::hash, fawkes::Interface::hash(), fawkes::Interface::hash_size(), fawkes::Mutex::lock(), fawkes::BlackBoardMemoryManager::lock(), fawkes::BlackBoardNotifier::notify_of_interface_created(), fawkes::BlackBoardNotifier::notify_of_writer_added(), fawkes::interface_header_t::refcount, fawkes::interface_header_t::serial, fawkes::Interface::serial(), fawkes::Interface::uid(), fawkes::Mutex::unlock(), and fawkes::BlackBoardMemoryManager::unlock().

Referenced by fawkes::LocalBlackBoard::open_for_writing().

◆ open_multiple_for_reading()

std::list< Interface * > fawkes::BlackBoardInterfaceManager::open_multiple_for_reading ( const char *  type_pattern,
const char *  id_pattern = "*",
const char *  owner = NULL 
)

Open all interfaces of the given type for reading.

This will create interface instances for all currently registered interfaces of the given type. The result can be casted to the appropriate type.

Parameters
type_patternpattern of interface types to open, supports wildcards similar to filenames (*, ?, []), see "man fnmatch" for all supported.
id_patternpattern of interface IDs to open, supports wildcards similar to filenames (*, ?, []), see "man fnmatch" for all supported.
ownername of entity which opened this interface. If using the BlackBoardAspect to access the blackboard leave this untouched unless you have a good reason.
Returns
list of new fully initialized interface instances of requested type. The is allocated using new and you have to free it using delete after you are done with it!

Definition at line 329 of file interface_manager.cpp.

References fawkes::BlackBoardMemoryManager::begin(), fawkes::BlackBoardMemoryManager::end(), fawkes::interface_header_t::hash, fawkes::Interface::hash(), fawkes::Interface::hash_size(), fawkes::interface_header_t::id, fawkes::Mutex::lock(), fawkes::BlackBoardMemoryManager::lock(), fawkes::BlackBoardNotifier::notify_of_reader_added(), fawkes::interface_header_t::num_readers, fawkes::interface_header_t::refcount, fawkes::interface_header_t::serial, fawkes::interface_header_t::type, fawkes::Interface::uid(), fawkes::Mutex::unlock(), and fawkes::BlackBoardMemoryManager::unlock().

Referenced by fawkes::LocalBlackBoard::open_multiple_for_reading().

◆ readers() [1/2]

std::list< std::string > fawkes::BlackBoardInterfaceManager::readers ( const Interface interface) const
virtual

Get owners of interfaces who opened for reading.

Parameters
interfacean interface to query for the UID
Returns
list of readers for this interface

Implements fawkes::InterfaceMediator.

Definition at line 666 of file interface_manager.cpp.

References fawkes::LockMap< KeyType, ValueType, LessKey >::lock(), fawkes::Interface::uid(), and fawkes::LockMap< KeyType, ValueType, LessKey >::unlock().

Referenced by list(), and list_all().

◆ readers() [2/2]

std::list< std::string > fawkes::BlackBoardInterfaceManager::readers ( const std::string &  uid) const

Get owners of interfaces who opened for reading.

Parameters
uidUID of interface to query for
Returns
list of readers for this interface

Definition at line 703 of file interface_manager.cpp.

References fawkes::LockMap< KeyType, ValueType, LessKey >::lock(), and fawkes::LockMap< KeyType, ValueType, LessKey >::unlock().

◆ writer() [1/2]

std::string fawkes::BlackBoardInterfaceManager::writer ( const Interface interface) const
virtual

Get writer of interface.

Parameters
interfacean interface to query for the UID
Returns
owner name of writing interface instance, or empty string of no writer exists

Implements fawkes::InterfaceMediator.

Definition at line 683 of file interface_manager.cpp.

References fawkes::LockMap< KeyType, ValueType, LessKey >::lock(), fawkes::Interface::uid(), and fawkes::LockMap< KeyType, ValueType, LessKey >::unlock().

Referenced by list(), and list_all().

◆ writer() [2/2]

std::string fawkes::BlackBoardInterfaceManager::writer ( const std::string &  uid) const

Get writer of interface.

Parameters
uidUID of interface to query for
Returns
owner name of writing interface instance, or empty string of no writer exists

Definition at line 724 of file interface_manager.cpp.

References fawkes::LockMap< KeyType, ValueType, LessKey >::lock(), and fawkes::LockMap< KeyType, ValueType, LessKey >::unlock().


The documentation for this class was generated from the following files: