Fawkes API  Fawkes Development Version
fawkes::RemoteBlackBoard Class Reference

Remote BlackBoard. More...

#include <>>

Inheritance diagram for fawkes::RemoteBlackBoard:

List of all members.

Public Member Functions

 RemoteBlackBoard (FawkesNetworkClient *client)
 Constructor.
 RemoteBlackBoard (const char *hostname, unsigned short int port)
 Constructor.
virtual ~RemoteBlackBoard ()
 Destructor.
virtual Interfaceopen_for_reading (const char *interface_type, const char *identifier)
 Open interface for reading.
virtual Interfaceopen_for_writing (const char *interface_type, const char *identifier)
 Open interface for writing.
virtual void close (Interface *interface)
 Close interface.
virtual InterfaceInfoListlist_all ()
 Get list of all currently existing interfaces.
virtual InterfaceInfoListlist (const char *type_pattern, const char *id_pattern)
 Get list of interfaces matching type and ID patterns.
virtual bool is_alive () const throw ()
 Check if the BlackBoard is still alive.
virtual bool try_aliveness_restore () throw ()
 Try to restore the aliveness of the BlackBoard instance.
std::list< Interface * > open_multiple_for_reading (const char *interface_type, const char *id_pattern="*")
 Open multiple interfaces for reading.
virtual void deregistered (unsigned int id) throw ()
 We are no longer registered in Fawkes network client.
virtual void inbound_received (FawkesNetworkMessage *msg, unsigned int id) throw ()
 Called for incoming messages.
virtual void connection_died (unsigned int id) throw ()
 Client connection died.
virtual void connection_established (unsigned int id) throw ()
 Client has established a connection.

Detailed Description

Remote BlackBoard.

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

Author:
Tim Niemueller

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::Thread::name(), fawkes::bb_ieventserial_msg_t::serial, fawkes::bb_ieventserial_msg_t::event_serial, fawkes::bb_ievent_msg_t::type, and fawkes::bb_ievent_msg_t::id.

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

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 open_multiple_for_reading(), and LaserGuiHildonWindow::on_connect().

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 list_all(), open_for_reading(), and close().

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::connected(), and fawkes::FawkesNetworkClient::connect().


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