Fawkes API
Fawkes Development Version
|
Fawkes Network Thread. More...
#include <>>
Public Member Functions | |
FawkesNetworkServerThread (bool enable_ipv4, bool enable_ipv6, const std::string &listen_ipv4, const std::string &listen_ipv6, unsigned int fawkes_port, ThreadCollector *thread_collector=0) | |
Constructor. More... | |
virtual | ~FawkesNetworkServerThread () |
Destructor. More... | |
virtual void | loop () |
Fawkes network thread loop. More... | |
virtual void | add_handler (FawkesNetworkHandler *handler) |
Add a handler. More... | |
virtual void | remove_handler (FawkesNetworkHandler *handler) |
Remove handler. More... | |
virtual void | broadcast (FawkesNetworkMessage *msg) |
Broadcast a message. More... | |
virtual void | broadcast (unsigned short int component_id, unsigned short int msg_id, void *payload, unsigned int payload_size) |
Broadcast a message. More... | |
virtual void | broadcast (unsigned short int component_id, unsigned short int msg_id) |
Broadcast message without payload. More... | |
virtual void | send (FawkesNetworkMessage *msg) |
Send a message. More... | |
virtual void | send (unsigned int to_clid, unsigned short int component_id, unsigned short int msg_id) |
Send a message without payload. More... | |
virtual void | send (unsigned int to_clid, unsigned short int component_id, unsigned short int msg_id, void *payload, unsigned int payload_size) |
Send a message. More... | |
virtual void | send (unsigned int to_clid, unsigned short int component_id, unsigned short int msg_id, FawkesNetworkMessageContent *content) |
Send a message. More... | |
void | add_connection (StreamSocket *s) throw () |
Add a new connection. More... | |
void | dispatch (FawkesNetworkMessage *msg) |
Dispatch messages. More... | |
void | force_send () |
Force sending of all pending messages. More... | |
![]() | |
virtual | ~Thread () |
Virtual destructor. More... | |
virtual void | init () |
Initialize the thread. More... | |
bool | prepare_finalize () |
Prepare finalization. More... | |
virtual bool | prepare_finalize_user () |
Prepare finalization user implementation. More... | |
virtual void | finalize () |
Finalize the thread. More... | |
void | cancel_finalize () |
Cancel finalization. More... | |
void | start (bool wait=true) |
Call this method to start the thread. More... | |
void | cancel () |
Cancel a thread. More... | |
void | join () |
Join the thread. More... | |
void | detach () |
Detach the thread. More... | |
void | kill (int sig) |
Send signal to a thread. More... | |
bool | operator== (const Thread &thread) |
Check if two threads are the same. More... | |
void | wakeup () |
Wake up thread. More... | |
void | wakeup (Barrier *barrier) |
Wake up thread and wait for barrier afterwards. More... | |
void | wait_loop_done () |
Wait for the current loop iteration to finish. More... | |
OpMode | opmode () const |
Get operation mode. More... | |
pthread_t | thread_id () const |
Get ID of thread. More... | |
bool | started () const |
Check if thread has been started. More... | |
bool | cancelled () const |
Check if thread has been cancelled. More... | |
bool | detached () const |
Check if thread has been detached. More... | |
bool | running () const |
Check if the thread is running. More... | |
bool | waiting () const |
Check if thread is currently waiting for wakeup. More... | |
const char * | name () const |
Get name of thread. More... | |
void | set_flags (uint32_t flags) |
Set all flags in one go. More... | |
void | set_flag (uint32_t flag) |
Set flag for the thread. More... | |
void | unset_flag (uint32_t flag) |
Unset flag. More... | |
bool | flagged_bad () const |
Check if FLAG_BAD was set. More... | |
void | set_delete_on_exit (bool del) |
Set whether the thread should be deleted on exit. More... | |
void | set_prepfin_hold (bool hold) |
Hold prepare_finalize(). More... | |
void | add_notification_listener (ThreadNotificationListener *notification_listener) |
Add notification listener. More... | |
void | remove_notification_listener (ThreadNotificationListener *notification_listener) |
Remove notification listener. More... | |
void | notify_of_failed_init () |
Notify of failed init. More... | |
![]() | |
virtual | ~FawkesNetworkHub () |
Virtual empty destructor. More... | |
![]() | |
virtual | ~NetworkIncomingConnectionHandler () |
Virtual destructor. More... | |
Protected Member Functions | |
virtual void | run () |
Stub to see name in backtrace for easier debugging. More... | |
![]() | |
Thread (const char *name) | |
Constructor. More... | |
Thread (const char *name, OpMode op_mode) | |
Constructor. More... | |
void | exit () |
Exit the thread. More... | |
void | test_cancel () |
Set cancellation point. More... | |
void | yield () |
Yield the processor to another thread or process. More... | |
void | set_opmode (OpMode op_mode) |
Set operation mode. More... | |
void | set_prepfin_conc_loop (bool concurrent=true) |
Set concurrent execution of prepare_finalize() and loop(). More... | |
void | set_coalesce_wakeups (bool coalesce=true) |
Set wakeup coalescing. More... | |
void | set_name (const char *format,...) |
Set name of thread. More... | |
virtual void | once () |
Execute an action exactly once. More... | |
bool | wakeup_pending () |
Check if wakeups are pending. More... | |
Additional Inherited Members | |
![]() | |
enum | OpMode { OPMODE_CONTINUOUS, OPMODE_WAITFORWAKEUP } |
Thread operation mode. More... | |
enum | CancelState { CANCEL_ENABLED, CANCEL_DISABLED } |
Cancel state. More... | |
![]() | |
static Thread * | current_thread () |
Get the Thread instance of the currently running thread. More... | |
static Thread * | current_thread_noexc () throw () |
Similar to current_thread, but does never throw an exception. More... | |
static pthread_t | current_thread_id () |
Get the ID of the currently running thread. More... | |
static void | init_main () |
Initialize Thread wrapper instance for main thread. More... | |
static void | destroy_main () |
Destroy main thread wrapper instance. More... | |
static void | set_cancel_state (CancelState new_state, CancelState *old_state=0) |
Set the cancel state of the current thread. More... | |
![]() | |
static const unsigned int | FLAG_BAD = 0x00000001 |
Standard thread flag: "thread is bad". More... | |
![]() | |
bool | finalize_prepared |
True if prepare_finalize() has been called and was not stopped with a cancel_finalize(), false otherwise. More... | |
Mutex * | loop_mutex |
Mutex that is used to protect a call to loop(). More... | |
Mutex * | loopinterrupt_antistarve_mutex |
Mutex to avoid starvation when trying to lock loop_mutex. More... | |
Fawkes Network Thread.
Maintains a list of clients and reacts on events triggered by the clients. Also runs the acceptor thread.
Definition at line 46 of file server_thread.h.
fawkes::FawkesNetworkServerThread::FawkesNetworkServerThread | ( | bool | enable_ipv4, |
bool | enable_ipv6, | ||
const std::string & | listen_ipv4, | ||
const std::string & | listen_ipv6, | ||
unsigned int | fawkes_port, | ||
ThreadCollector * | thread_collector = 0 |
||
) |
Constructor.
enable_ipv4 | true to listen on the IPv4 TCP port |
enable_ipv6 | true to listen on the IPv6 TCP port |
listen_ipv4 | IPv4 address to listen on for incoming connections, 0.0.0.0 to listen on any local address |
listen_ipv6 | IPv6 address to listen on for incoming connections, :: to listen on any local address |
fawkes_port | port for Fawkes network protocol |
thread_collector | thread collector to register new threads with |
Definition at line 59 of file server_thread.cpp.
References fawkes::ThreadCollector::add(), fawkes::Socket::IPv4, and fawkes::Socket::IPv6.
|
virtual |
Destructor.
Definition at line 92 of file server_thread.cpp.
References fawkes::ThreadCollector::remove().
|
virtual |
Add a new connection.
Called by the NetworkAcceptorThread if a new client connected.
s | socket for new client |
Implements fawkes::NetworkIncomingConnectionHandler.
Definition at line 123 of file server_thread.cpp.
References fawkes::ThreadCollector::add(), fawkes::FawkesNetworkServerClientThread::set_clid(), fawkes::Thread::start(), fawkes::MutexLocker::unlock(), and fawkes::Thread::wakeup().
|
virtual |
Add a handler.
handler | to add. |
Implements fawkes::FawkesNetworkHub.
Definition at line 152 of file server_thread.cpp.
References fawkes::FawkesNetworkHandler::id().
|
virtual |
Broadcast a message.
Method to broadcast a message to all connected clients. This method will take ownership of the passed message. If you want to use if after enqueing it you must reference it explicitly before calling this method.
msg | Message to broadcast |
Implements fawkes::FawkesNetworkHub.
Definition at line 255 of file server_thread.cpp.
References fawkes::RefCount::ref(), and fawkes::RefCount::unref().
Referenced by broadcast().
|
virtual |
Broadcast a message.
A FawkesNetworkMessage is created and broacasted via the emitter.
component_id | component ID |
msg_id | message type id |
payload | payload buffer |
payload_size | size of payload buffer |
Implements fawkes::FawkesNetworkHub.
Definition at line 278 of file server_thread.cpp.
References broadcast().
|
virtual |
Broadcast message without payload.
component_id | component ID |
msg_id | message type ID |
Implements fawkes::FawkesNetworkHub.
Definition at line 293 of file server_thread.cpp.
References broadcast().
void fawkes::FawkesNetworkServerThread::dispatch | ( | FawkesNetworkMessage * | msg | ) |
Dispatch messages.
Actually messages are just put into the inbound message queue and dispatched during the next loop iteration. So after adding all the messages you have to wakeup the thread to get them actually dispatched.
msg | message to dispatch |
Definition at line 391 of file server_thread.cpp.
References fawkes::LockQueue< Type >::push_locked(), and fawkes::RefCount::ref().
Referenced by fawkes::FawkesNetworkServerClientThread::set_clid().
|
virtual |
Force sending of all pending messages.
Implements fawkes::FawkesNetworkHub.
Definition at line 238 of file server_thread.cpp.
|
virtual |
Fawkes network thread loop.
The thread loop will check all clients for their alivness and dead clients are removed. Then inbound messages are processed and dispatched properly to registered handlers. Then the thread waits for a new event to happen (event emitting threads need to wakeup this thread!).
Reimplemented from fawkes::Thread.
Definition at line 182 of file server_thread.cpp.
References fawkes::FawkesNetworkMessage::cid(), fawkes::LockQueue< Type >::lock(), fawkes::ThreadCollector::remove(), fawkes::LockQueue< Type >::unlock(), and fawkes::RefCount::unref().
|
virtual |
Remove handler.
handler | handler to remove |
Implements fawkes::FawkesNetworkHub.
Definition at line 166 of file server_thread.cpp.
References fawkes::FawkesNetworkHandler::id().
|
inlineprotectedvirtual |
Stub to see name in backtrace for easier debugging.
Reimplemented from fawkes::Thread.
Definition at line 84 of file server_thread.h.
References fawkes::Thread::run().
|
virtual |
Send a message.
Method to send a message to a specific client. The client ID provided in the message is used to determine the correct recipient. If no client is connected for the given client ID the message shall be silently ignored. This method will take ownership of the passed message. If you want to use if after enqueing it you must reference it explicitly before calling this method. Implemented Emitter interface message.
msg | Message to send |
Implements fawkes::FawkesNetworkHub.
Definition at line 312 of file server_thread.cpp.
References fawkes::FawkesNetworkMessage::clid().
Referenced by send().
|
virtual |
Send a message without payload.
A FawkesNetworkMessage with empty payload is created and sent via the emitter. This is particularly useful for simple status messages that you want to send.
to_clid | client ID of recipient |
component_id | component ID |
msg_id | message type id |
Implements fawkes::FawkesNetworkHub.
Definition at line 376 of file server_thread.cpp.
References send().
|
virtual |
Send a message.
A FawkesNetworkMessage is created and sent via the emitter.
to_clid | client ID of recipient |
component_id | component ID |
msg_id | message type id |
payload | payload buffer |
payload_size | size of payload buffer |
Implements fawkes::FawkesNetworkHub.
Definition at line 338 of file server_thread.cpp.
References send().
|
virtual |
Send a message.
A FawkesNetworkMessage is created and sent via the emitter.
to_clid | client ID of recipient |
component_id | component ID |
msg_id | message type id |
content | Fawkes complex network message content |
Implements fawkes::FawkesNetworkHub.
Definition at line 357 of file server_thread.cpp.
References send().