Fawkes API  Fawkes Development Version
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
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)
 Open interface for reading. More...
 
virtual Interfaceopen_for_writing (const char *interface_type, const char *identifier)
 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="*")
 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
 BlackBoard ()
 Constructor. More...
 
virtual ~BlackBoard ()
 Destructor. More...
 
template<class InterfaceType >
std::list< InterfaceType * > open_multiple_for_reading (const char *id_pattern="*")
 Open all interfaces of given type for reading. More...
 
template<class InterfaceType >
InterfaceType * open_for_reading (const char *identifier)
 Get interface of given type. More...
 
template<class InterfaceType >
InterfaceType * open_for_writing (const char *identifier)
 Get writer interface of given type. 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...
 
- 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 registraion/updates. 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 49 of file remote.h.

Constructor & Destructor Documentation

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().

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().

fawkes::RemoteBlackBoard::~RemoteBlackBoard ( )
virtual

Member Function Documentation

void fawkes::RemoteBlackBoard::close ( Interface interface)
virtual
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 521 of file remote.cpp.

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 536 of file remote.cpp.

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 450 of file remote.cpp.

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 456 of file remote.cpp.

References fawkes::Thread::current_thread(), fawkes::bb_ieventserial_msg_t::event_serial, fawkes::bb_ievent_msg_t::id, fawkes::Thread::name(), fawkes::bb_ieventserial_msg_t::serial, and fawkes::bb_ievent_msg_t::type.

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().

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 395 of file remote.cpp.

References fawkes::InterfaceInfoList::append(), fawkes::Thread::current_thread(), fawkes::FawkesNetworkClient::enqueue(), fawkes::BlackBoardInterfaceListContent::has_next(), fawkes::bb_iinfo_msg_t::has_writer, 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::num_readers, fawkes::bb_iinfo_msg_t::serial, fawkes::bb_iinfo_msg_t::type, fawkes::bb_ilistreq_msg_t::type_pattern, fawkes::Mutex::unlock(), fawkes::RefCount::unref(), and fawkes::WaitCondition::wait().

Interface * fawkes::RemoteBlackBoard::open_for_reading ( const char *  type,
const char *  identifier 
)
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
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(), and open_multiple_for_reading().

Interface * fawkes::RemoteBlackBoard::open_for_writing ( const char *  type,
const char *  identifier 
)
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
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.

std::list< Interface * > fawkes::RemoteBlackBoard::open_multiple_for_reading ( const char *  type_pattern,
const char *  id_pattern = "*" 
)
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.
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().

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

Try to restore the aliveness of the BlackBoard instance.

Note that even though the aliveness of the BlackBoard is restored single interfaces may still be invalid. That can for instance happen if a remote connection is re-established and a writer has been created during the downtime and an own writer instance of that very interface cannot be restored.

Returns
true if the aliveness could be restored and the BlackBoard is operational again, false otherwise.

Implements fawkes::BlackBoard.

Definition at line 163 of file remote.cpp.

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


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