Fawkes API  Fawkes Development Version
fawkes::RemoteBlackBoard Class Reference

Remote BlackBoard. More...

#include <>>

Inheritance diagram for fawkes::RemoteBlackBoard:

Public Member Functions

 RemoteBlackBoard (FawkesNetworkClient *client)
 Constructor. More...
 
 RemoteBlackBoard (const char *hostname, unsigned short int port)
 Constructor. More...
 
virtual ~RemoteBlackBoard ()
 Destructor. More...
 
virtual Interfaceopen_for_reading (const char *interface_type, const char *identifier, const char *owner=NULL)
 Open interface for reading. More...
 
virtual Interfaceopen_for_writing (const char *interface_type, const char *identifier, const char *owner=NULL)
 Open interface for writing. More...
 
virtual void close (Interface *interface)
 Close interface. More...
 
virtual InterfaceInfoListlist_all ()
 Get list of all currently existing interfaces. More...
 
virtual InterfaceInfoListlist (const char *type_pattern, const char *id_pattern)
 Get list of interfaces matching type and ID patterns. More...
 
virtual bool is_alive () const throw ()
 Check if the BlackBoard is still alive. More...
 
virtual bool try_aliveness_restore () throw ()
 Try to restore the aliveness of the BlackBoard instance. More...
 
std::list< Interface * > open_multiple_for_reading (const char *interface_type, const char *id_pattern="*", const char *owner=NULL)
 Open multiple interfaces for reading. More...
 
virtual void deregistered (unsigned int id) throw ()
 We are no longer registered in Fawkes network client. More...
 
virtual void inbound_received (FawkesNetworkMessage *msg, unsigned int id) throw ()
 Called for incoming messages. More...
 
virtual void connection_died (unsigned int id) throw ()
 Client connection died. More...
 
virtual void connection_established (unsigned int id) throw ()
 Client has established a connection. More...
 
- Public Member Functions inherited from fawkes::BlackBoard
virtual ~BlackBoard ()
 Destructor. More...
 
virtual Interfaceopen_for_reading_f (const char *interface_type, const char *identifier,...)
 Open interface for reading with identifier format string. More...
 
virtual Interfaceopen_for_writing_f (const char *interface_type, const char *identifier,...)
 Open interface for writing with identifier format string. More...
 
template<class InterfaceType >
std::list< InterfaceType * > open_multiple_for_reading (const char *id_pattern="*", const char *owner=NULL)
 Open all interfaces of given type for reading. More...
 
template<class InterfaceType >
InterfaceType * open_for_reading (const char *identifier, const char *owner=NULL)
 Get interface of given type. More...
 
template<class InterfaceType >
InterfaceType * open_for_writing (const char *identifier, const char *owner=NULL)
 Get writer interface of given type. More...
 
template<class InterfaceType >
InterfaceType * open_for_reading_f (const char *identifier,...)
 Get interface of given type with identifier format string. More...
 
template<class InterfaceType >
InterfaceType * open_for_writing_f (const char *identifier,...)
 Get writer interface of given type with identifier format string. More...
 
virtual void register_listener (BlackBoardInterfaceListener *listener, ListenerRegisterFlag flag=BBIL_FLAG_ALL)
 Register BB event listener. More...
 
virtual void update_listener (BlackBoardInterfaceListener *listener, ListenerRegisterFlag flag=BBIL_FLAG_ALL)
 Update BB event listener. More...
 
virtual void unregister_listener (BlackBoardInterfaceListener *listener)
 Unregister BB interface listener. More...
 
virtual void register_observer (BlackBoardInterfaceObserver *observer)
 Register BB interface observer. More...
 
virtual void unregister_observer (BlackBoardInterfaceObserver *observer)
 Unregister BB interface observer. More...
 
std::string demangle_fawkes_interface_name (const char *type)
 Produce interface name from C++ signature. More...
 
std::string format_identifier (const char *identifier_format, va_list arg)
 Get formatted identifier string. More...
 
- Public Member Functions inherited from fawkes::FawkesNetworkClientHandler
virtual ~FawkesNetworkClientHandler ()
 Empty virtual destructor. More...
 

Additional Inherited Members

- Public Types inherited from fawkes::BlackBoard
enum  ListenerRegisterFlag {
  BBIL_FLAG_DATA = 1, BBIL_FLAG_MESSAGES = 2, BBIL_FLAG_READER = 4, BBIL_FLAG_WRITER = 8,
  BBIL_FLAG_ALL = 15
}
 Flags to constrain listener registration/updates. More...
 
- Protected Member Functions inherited from fawkes::BlackBoard
 BlackBoard (bool create_notifier=true)
 Constructor. More...
 
- Protected Attributes inherited from fawkes::BlackBoard
BlackBoardNotifier__notifier
 Notifier for BB events. More...
 

Detailed Description

Remote BlackBoard.

This class implements the access to a remote BlackBoard using the Fawkes network protocol.

Author
Tim Niemueller

Definition at line 48 of file remote.h.

Constructor & Destructor Documentation

◆ RemoteBlackBoard() [1/2]

fawkes::RemoteBlackBoard::RemoteBlackBoard ( FawkesNetworkClient client)

Constructor.

Parameters
clientFawkes network client to use.

Definition at line 58 of file remote.cpp.

References fawkes::FawkesNetworkClient::connected(), and fawkes::FawkesNetworkClient::register_handler().

◆ RemoteBlackBoard() [2/2]

fawkes::RemoteBlackBoard::RemoteBlackBoard ( const char *  hostname,
unsigned short int  port 
)

Constructor.

This will internall create a fawkes network client that is used to communicate with the remote BlackBoard.

Parameters
hostnamehostname to connect to
portport to connect to

Definition at line 86 of file remote.cpp.

References fawkes::FawkesNetworkClient::connect(), fawkes::FawkesNetworkClient::connected(), and fawkes::FawkesNetworkClient::register_handler().

◆ ~RemoteBlackBoard()

fawkes::RemoteBlackBoard::~RemoteBlackBoard ( )
virtual

Member Function Documentation

◆ close()

void fawkes::RemoteBlackBoard::close ( Interface interface)
virtual

◆ connection_died()

void fawkes::RemoteBlackBoard::connection_died ( unsigned int  id)
throw (
)
virtual

Client connection died.

This method is used to inform handlers that the connection has died for any reason. No more data can be send and no more messages should be enqueued because it is unclear when they would be sent.

Parameters
idthe id of the calling client

Implements fawkes::FawkesNetworkClientHandler.

Definition at line 527 of file remote.cpp.

References fawkes::WaitCondition::wake_all().

◆ connection_established()

void fawkes::RemoteBlackBoard::connection_established ( unsigned int  id)
throw (
)
virtual

Client has established a connection.

Whenever the client establishes a connection this is signaled to handlers with this method. You can register to a client at any time, you may even enqueue messages to a client while the connection is dead. If the client at some point gets connected again, the messages will then be send out in one go. You should use this in your application though to only send data if the connection is alive and you should let the user know about the connection status.

Parameters
idthe id of the calling client

Implements fawkes::FawkesNetworkClientHandler.

Definition at line 542 of file remote.cpp.

◆ deregistered()

void fawkes::RemoteBlackBoard::deregistered ( unsigned int  id)
throw (
)
virtual

We are no longer registered in Fawkes network client.

Ignored.

Parameters
idthe id of the calling client

Implements fawkes::FawkesNetworkClientHandler.

Definition at line 456 of file remote.cpp.

◆ inbound_received()

void fawkes::RemoteBlackBoard::inbound_received ( FawkesNetworkMessage m,
unsigned int  id 
)
throw (
)
virtual

Called for incoming messages.

This is called when an incoming message has been received. If this method was called one or more times then the a previously carried out wait(cid) call will continue.

Parameters
mMessage to handle
idthe id of the calling client

Implements fawkes::FawkesNetworkClientHandler.

Definition at line 462 of file remote.cpp.

References fawkes::BlackBoard::__notifier, fawkes::Thread::current_thread(), fawkes::bb_ieventserial_msg_t::event_serial, fawkes::bb_ievent_msg_t::id, fawkes::Mutex::lock(), fawkes::Thread::name(), fawkes::BlackBoardNotifier::notify_of_interface_created(), fawkes::BlackBoardNotifier::notify_of_interface_destroyed(), fawkes::RefCount::ref(), fawkes::bb_ieventserial_msg_t::serial, fawkes::bb_ievent_msg_t::type, fawkes::Mutex::unlock(), and fawkes::WaitCondition::wake_all().

◆ is_alive()

bool fawkes::RemoteBlackBoard::is_alive ( ) const
throw (
)
virtual

Check if the BlackBoard is still alive.

Returns
true, if the BlackBoard is still alive and may be used, false otherwise.

Implements fawkes::BlackBoard.

Definition at line 137 of file remote.cpp.

References fawkes::FawkesNetworkClient::connected(), fawkes::Interface::id(), fawkes::Interface::is_writer(), fawkes::Interface::owner(), fawkes::Interface::set_validity(), and fawkes::Interface::type().

Referenced by try_aliveness_restore().

◆ list()

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

Get list of interfaces matching type and ID patterns.

See the fnmatch() documentation for possible patterns.

Parameters
type_patternpattern with shell like globs (* for any number of characters, ? for exactly one character) to match the interface type.
id_patternpattern with shell like globs (* for any number of characters, ? for exactly one character) to match the interface ID.
Returns
list of interfaces

Implements fawkes::BlackBoard.

Definition at line 398 of file remote.cpp.

References fawkes::InterfaceInfoList::append(), fawkes::Thread::current_thread(), fawkes::FawkesNetworkClient::enqueue(), fawkes::BlackBoardInterfaceListContent::has_next(), fawkes::bb_iinfo_msg_t::hash, fawkes::bb_iinfo_msg_t::id, fawkes::bb_ilistreq_msg_t::id_pattern, fawkes::Mutex::lock(), fawkes::FawkesNetworkMessage::msgc(), fawkes::FawkesNetworkMessage::msgid(), fawkes::BlackBoardInterfaceListContent::next(), fawkes::bb_iinfo_msg_t::serial, fawkes::bb_iinfo_msg_t::timestamp_sec, fawkes::bb_iinfo_msg_t::timestamp_usec, fawkes::bb_iinfo_msg_t::type, fawkes::bb_ilistreq_msg_t::type_pattern, fawkes::Mutex::unlock(), fawkes::RefCount::unref(), fawkes::WaitCondition::wait(), and fawkes::bb_iinfo_msg_t::writer_readers.

◆ list_all()

◆ open_for_reading()

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

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.

Implements fawkes::BlackBoard.

Definition at line 272 of file remote.cpp.

Referenced by LaserGuiHildonWindow::on_connect(), open_multiple_for_reading(), and EclipseDebugger::~EclipseDebugger().

◆ open_for_writing()

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

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

Implements fawkes::BlackBoard.

Definition at line 279 of file remote.cpp.

◆ open_multiple_for_reading()

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

Open multiple interfaces for reading.

This will create interface instances for currently registered interfaces of the given type that match the given ID pattern. 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. You have to close all interfaces on your own when done with the list!

Implements fawkes::BlackBoard.

Definition at line 286 of file remote.cpp.

References close(), list_all(), and open_for_reading().

◆ try_aliveness_restore()

bool fawkes::RemoteBlackBoard::try_aliveness_restore ( )
throw (
)
virtual

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