Fawkes API Fawkes Development Version
|
Simple Fawkes network client. More...
#include <netcomm/fawkes/client.h>
Public Member Functions | |
FawkesNetworkClient () | |
Constructor. More... | |
FawkesNetworkClient (const char *host, unsigned short int port) | |
Constructor. More... | |
FawkesNetworkClient (unsigned int id, const char *host, unsigned short int port) | |
Constructor. More... | |
~FawkesNetworkClient () | |
Destructor. More... | |
void | connect () |
Connect to remote. More... | |
void | disconnect () |
Disconnect socket. More... | |
void | connect (const char *host, unsigned short int port) |
Connect to new ip and port, and set hostname. More... | |
void | connect (const char *hostname, const struct sockaddr *addr, socklen_t addrlen) |
Connect to specific endpoint. More... | |
void | connect (const char *hostname, const struct sockaddr_storage &addr) |
Connect to specific endpoint. More... | |
void | enqueue (FawkesNetworkMessage *message) |
Enqueue message to send. More... | |
void | enqueue_and_wait (FawkesNetworkMessage *message, unsigned int timeout_sec=15) |
Enqueue message to send and wait for answer. More... | |
void | wait (unsigned int component_id, unsigned int timeout_sec=15) |
Wait for messages for component ID. More... | |
void | wake (unsigned int component_id) |
Wake a waiting thread. More... | |
void | interrupt_connect () |
Interrupt connect(). More... | |
void | register_handler (FawkesNetworkClientHandler *handler, unsigned int component_id) |
Register handler. More... | |
void | deregister_handler (unsigned int component_id) |
Deregister handler. More... | |
bool | connected () const noexcept |
Check if connection is alive. More... | |
bool | has_id () const |
Check whether the client has an id. More... | |
unsigned int | id () const |
Get the client's ID. More... | |
const char * | get_hostname () const |
Get the client's hostname. More... | |
Simple Fawkes network client.
Allows access to a remote instance via the network. Encapsulates all needed interaction with the network.
fawkes::FawkesNetworkClient::FawkesNetworkClient | ( | ) |
Constructor.
Note, you cannot call the connect() without parameters the first time you establish an connection when using this ctor!
Definition at line 340 of file client.cpp.
fawkes::FawkesNetworkClient::FawkesNetworkClient | ( | const char * | host, |
unsigned short int | port | ||
) |
Constructor.
host | remote host to connect to. |
port | port to connect to. |
Definition at line 308 of file client.cpp.
fawkes::FawkesNetworkClient::FawkesNetworkClient | ( | unsigned int | id, |
const char * | host, | ||
unsigned short int | port | ||
) |
Constructor.
id | id of the client. |
host | remote host to connect to. |
port | port to connect to. |
Definition at line 373 of file client.cpp.
References id().
fawkes::FawkesNetworkClient::~FawkesNetworkClient | ( | ) |
void fawkes::FawkesNetworkClient::connect | ( | ) |
Connect to remote.
SocketException | thrown by Socket::connect() |
NullPointerException | thrown if hostname has not been set |
Definition at line 424 of file client.cpp.
References fawkes::Thread::cancel(), fawkes::Socket::connect(), disconnect(), fawkes::Thread::join(), fawkes::Mutex::lock(), fawkes::Thread::start(), fawkes::Mutex::unlock(), and fawkes::WaitCondition::wait().
Referenced by connect(), SkillShellThread::loop(), fawkes::ServiceSelectorCBE::on_btn_connect_clicked(), fawkes::ServiceSelectorCBE::on_service_selected(), fawkes::RemoteBlackBoard::RemoteBlackBoard(), fawkes::ServiceChooserDialog::run_and_connect(), SkillShellThread::SkillShellThread(), and fawkes::RemoteBlackBoard::try_aliveness_restore().
void fawkes::FawkesNetworkClient::connect | ( | const char * | host, |
unsigned short int | port | ||
) |
Connect to new ip and port, and set hostname.
host | remote host name |
port | new port to connect to |
Definition at line 491 of file client.cpp.
References connect().
void fawkes::FawkesNetworkClient::connect | ( | const char * | hostname, |
const struct sockaddr * | addr, | ||
socklen_t | addr_len | ||
) |
Connect to specific endpoint.
hostname | hostname, informational only and not used for connecting |
addr | sockaddr structure of specific endpoint to connect to |
addr_len | length of addr |
Definition at line 506 of file client.cpp.
References connect().
void fawkes::FawkesNetworkClient::connect | ( | const char * | hostname, |
const struct sockaddr_storage & | addr | ||
) |
Connect to specific endpoint.
hostname | hostname, informational only and not used for connecting |
addr | sockaddr_storage structure of specific endpoint to connect to |
Definition at line 524 of file client.cpp.
References connect().
|
noexcept |
Check if connection is alive.
Definition at line 828 of file client.cpp.
Referenced by fawkes::RemoteBlackBoard::close(), fawkes::RemoteBlackBoard::is_alive(), fawkes::FawkesNetworkClientSendThread::loop(), SkillShellThread::loop(), fawkes::NetworkConfiguration::NetworkConfiguration(), fawkes::ServiceSelectorCBE::on_btn_connect_clicked(), LaserGuiGtkWindow::on_connection_clicked(), LaserGuiHildonWindow::on_connection_clicked(), LaserGuiGtkWindow::on_select_clicked(), fawkes::ServiceSelectorCBE::on_service_selected(), fawkes::RemoteBlackBoard::RemoteBlackBoard(), fawkes::ServiceChooserDialog::run_and_connect(), fawkes::LogView::set_client(), fawkes::RemoteBlackBoard::try_aliveness_restore(), and fawkes::LogView::~LogView().
void fawkes::FawkesNetworkClient::deregister_handler | ( | unsigned int | component_id | ) |
Deregister handler.
Cannot be called while processing a message.
component_id | component ID |
Definition at line 676 of file client.cpp.
References fawkes::Mutex::lock(), fawkes::LockMap< KeyType, ValueType, LessKey >::lock(), fawkes::Mutex::unlock(), fawkes::LockMap< KeyType, ValueType, LessKey >::unlock(), and fawkes::WaitCondition::wake_all().
Referenced by PluginTool::run(), fawkes::ConnectionDispatcher::set_cid(), fawkes::ConnectionDispatcher::set_client(), fawkes::NetworkConfiguration::~NetworkConfiguration(), fawkes::PluginTreeView::~PluginTreeView(), fawkes::RemoteBlackBoard::~RemoteBlackBoard(), and SkillShellThread::~SkillShellThread().
void fawkes::FawkesNetworkClient::disconnect | ( | ) |
Disconnect socket.
Definition at line 539 of file client.cpp.
References fawkes::Thread::cancel(), fawkes::FawkesNetworkClientSendThread::force_send(), and fawkes::Thread::join().
Referenced by connect(), SkillShellThread::loop(), fawkes::ServiceSelectorCBE::on_btn_connect_clicked(), LaserGuiGtkWindow::on_connection_clicked(), LaserGuiHildonWindow::on_connection_clicked(), fawkes::ServiceSelectorCBE::on_service_selected(), ~FawkesNetworkClient(), fawkes::RemoteBlackBoard::~RemoteBlackBoard(), and SkillShellThread::~SkillShellThread().
void fawkes::FawkesNetworkClient::enqueue | ( | FawkesNetworkMessage * | message | ) |
Enqueue message to send.
This method takes ownership of the message. If you want to use the message after enqueing you must reference:
Without extra referencing the message may not be used after enqueuing.
message | message to send |
Definition at line 596 of file client.cpp.
References fawkes::FawkesNetworkClientSendThread::enqueue().
Referenced by fawkes::RemoteBlackBoard::close(), fawkes::RemoteBlackBoard::list(), fawkes::RemoteBlackBoard::list_all(), fawkes::BlackBoardInterfaceProxy::notify_of_data_refresh(), fawkes::LogView::set_client(), fawkes::NetworkConfiguration::set_mirror_mode(), fawkes::BlackBoardInterfaceProxy::transmit(), fawkes::LogView::~LogView(), and fawkes::PluginTreeView::~PluginTreeView().
void fawkes::FawkesNetworkClient::enqueue_and_wait | ( | FawkesNetworkMessage * | message, |
unsigned int | timeout_sec = 15 |
||
) |
Enqueue message to send and wait for answer.
It is guaranteed that an answer cannot be missed. However, if the component sends another message (which is not the answer to the query) this will also trigger the wait condition to be woken up. The component ID to wait for is taken from the message. This message also calls unref() on the message. If you want to use it after enqueuing make sure you ref() before calling this method.
message | message to send |
timeout_sec | timeout for the waiting operation in seconds, 0 to wait forever (warning, this may result in a deadlock!) |
Definition at line 614 of file client.cpp.
References fawkes::FawkesNetworkMessage::cid(), fawkes::FawkesNetworkClientSendThread::enqueue(), fawkes::Mutex::lock(), fawkes::FawkesNetworkMessage::msgid(), fawkes::WaitCondition::reltimed_wait(), and fawkes::Mutex::unlock().
Referenced by fawkes::NetworkConfiguration::get_value().
const char * fawkes::FawkesNetworkClient::get_hostname | ( | ) | const |
bool fawkes::FawkesNetworkClient::has_id | ( | ) | const |
Check whether the client has an id.
Definition at line 837 of file client.cpp.
unsigned int fawkes::FawkesNetworkClient::id | ( | ) | const |
Get the client's ID.
Definition at line 846 of file client.cpp.
Referenced by FawkesNetworkClient().
void fawkes::FawkesNetworkClient::interrupt_connect | ( | ) |
Interrupt connect().
This is for example handy to interrupt in connection_died() before a connection_established() event has been received.
Definition at line 576 of file client.cpp.
References fawkes::Mutex::lock(), fawkes::Mutex::unlock(), and fawkes::WaitCondition::wake_all().
void fawkes::FawkesNetworkClient::register_handler | ( | FawkesNetworkClientHandler * | handler, |
unsigned int | component_id | ||
) |
Register handler.
Handlers are used to handle incoming packets. There may only be one handler per component! Cannot be called while processing a message.
handler | handler to register |
component_id | component ID to register the handler for. |
Definition at line 658 of file client.cpp.
References fawkes::LockMap< KeyType, ValueType, LessKey >::lock(), and fawkes::LockMap< KeyType, ValueType, LessKey >::unlock().
Referenced by fawkes::ConnectionDispatcher::ConnectionDispatcher(), fawkes::NetworkConfiguration::NetworkConfiguration(), fawkes::RemoteBlackBoard::RemoteBlackBoard(), PluginTool::run(), fawkes::ConnectionDispatcher::set_cid(), fawkes::ConnectionDispatcher::set_client(), and SkillShellThread::SkillShellThread().
void fawkes::FawkesNetworkClient::wait | ( | unsigned int | component_id, |
unsigned int | timeout_sec = 15 |
||
) |
Wait for messages for component ID.
This will wait for messages of the given component ID to arrive. The calling thread is blocked until messages are available.
component_id | component ID to monitor |
timeout_sec | timeout for the waiting operation in seconds, 0 to wait forever (warning, this may result in a deadlock!) |
Definition at line 785 of file client.cpp.
References fawkes::Mutex::lock(), fawkes::WaitCondition::reltimed_wait(), and fawkes::Mutex::unlock().
Referenced by ConfigChangeWatcherTool::run().
void fawkes::FawkesNetworkClient::wake | ( | unsigned int | component_id | ) |
Wake a waiting thread.
This will wakeup all threads currently waiting for the specified component ID. This can be helpful to wake a sleeping thread if you received a signal.
component_id | component ID for threads to wake up |
Definition at line 814 of file client.cpp.
References fawkes::Mutex::lock(), fawkes::Mutex::unlock(), and fawkes::WaitCondition::wake_all().
Referenced by PluginTool::handle_signal().