Fawkes API Fawkes Development Version
|
Fawkes Network Thread. More...
#include <>>
Public Member Functions | |
FawkesNetworkServerThread (unsigned int fawkes_port, ThreadCollector *thread_collector=0) | |
Constructor. | |
virtual | ~FawkesNetworkServerThread () |
Destructor. | |
virtual void | loop () |
Fawkes network thread loop. | |
virtual void | add_handler (FawkesNetworkHandler *handler) |
Add a handler. | |
virtual void | remove_handler (FawkesNetworkHandler *handler) |
Remove handler. | |
virtual void | broadcast (FawkesNetworkMessage *msg) |
Broadcast a message. | |
virtual void | broadcast (unsigned short int component_id, unsigned short int msg_id, void *payload, unsigned int payload_size) |
Broadcast a message. | |
virtual void | broadcast (unsigned short int component_id, unsigned short int msg_id) |
Broadcast message without payload. | |
virtual void | send (FawkesNetworkMessage *msg) |
Send a message. | |
virtual void | send (unsigned int to_clid, unsigned short int component_id, unsigned short int msg_id) |
Send a message without payload. | |
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. | |
virtual void | send (unsigned int to_clid, unsigned short int component_id, unsigned short int msg_id, FawkesNetworkMessageContent *content) |
Send a message. | |
void | add_connection (StreamSocket *s) throw () |
Add a new connection. | |
void | dispatch (FawkesNetworkMessage *msg) |
Dispatch messages. | |
void | force_send () |
Force sending of all pending messages. | |
Protected Member Functions | |
virtual void | run () |
Stub to see name in backtrace for easier debugging. |
Fawkes Network Thread.
Maintains a list of clients and reacts on events triggered by the clients. Also runs the acceptor thread.
Definition at line 43 of file server_thread.h.
fawkes::FawkesNetworkServerThread::FawkesNetworkServerThread | ( | unsigned int | fawkes_port, |
ThreadCollector * | thread_collector = 0 |
||
) |
Constructor.
thread_collector | thread collector to register new threads with |
fawkes_port | port for Fawkes network protocol |
Definition at line 52 of file server_thread.cpp.
References fawkes::ThreadCollector::add(), and fawkes::Thread::start().
fawkes::FawkesNetworkServerThread::~FawkesNetworkServerThread | ( | ) | [virtual] |
Destructor.
Definition at line 72 of file server_thread.cpp.
References fawkes::Thread::cancel(), fawkes::Thread::join(), and fawkes::ThreadCollector::remove().
void fawkes::FawkesNetworkServerThread::add_connection | ( | StreamSocket * | s | ) | throw () [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 100 of file server_thread.cpp.
References fawkes::FawkesNetworkServerClientThread::set_clid(), and fawkes::Thread::start().
void fawkes::FawkesNetworkServerThread::add_handler | ( | FawkesNetworkHandler * | handler | ) | [virtual] |
Add a handler.
handler | to add. |
Implements fawkes::FawkesNetworkHub.
Definition at line 126 of file server_thread.cpp.
References fawkes::FawkesNetworkHandler::id(), fawkes::LockMap< KeyType, ValueType, LessKey >::lock(), and fawkes::LockMap< KeyType, ValueType, LessKey >::unlock().
void fawkes::FawkesNetworkServerThread::broadcast | ( | FawkesNetworkMessage * | msg | ) | [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 221 of file server_thread.cpp.
References fawkes::RefCount::ref(), and fawkes::RefCount::unref().
Referenced by broadcast().
void fawkes::FawkesNetworkServerThread::broadcast | ( | unsigned short int | component_id, |
unsigned short int | msg_id, | ||
void * | payload, | ||
unsigned int | payload_size | ||
) | [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 242 of file server_thread.cpp.
References broadcast().
void fawkes::FawkesNetworkServerThread::broadcast | ( | unsigned short int | component_id, |
unsigned short int | msg_id | ||
) | [virtual] |
Broadcast message without payload.
component_id | component ID |
msg_id | message type ID |
Implements fawkes::FawkesNetworkHub.
Definition at line 257 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 354 of file server_thread.cpp.
References fawkes::LockQueue< Type >::push_locked(), and fawkes::RefCount::ref().
void fawkes::FawkesNetworkServerThread::force_send | ( | ) | [virtual] |
Force sending of all pending messages.
Implements fawkes::FawkesNetworkHub.
Definition at line 204 of file server_thread.cpp.
References fawkes::LockMap< KeyType, ValueType, LessKey >::lock(), and fawkes::LockMap< KeyType, ValueType, LessKey >::unlock().
void fawkes::FawkesNetworkServerThread::loop | ( | ) | [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 159 of file server_thread.cpp.
References fawkes::FawkesNetworkMessage::cid(), fawkes::LockQueue< Type >::lock(), fawkes::LockMap< KeyType, ValueType, LessKey >::lock(), fawkes::ThreadCollector::remove(), fawkes::LockMap< KeyType, ValueType, LessKey >::unlock(), fawkes::LockQueue< Type >::unlock(), and fawkes::RefCount::unref().
void fawkes::FawkesNetworkServerThread::remove_handler | ( | FawkesNetworkHandler * | handler | ) | [virtual] |
Remove handler.
handler | handler to remove |
Implements fawkes::FawkesNetworkHub.
Definition at line 142 of file server_thread.cpp.
References fawkes::FawkesNetworkHandler::id(), fawkes::LockMap< KeyType, ValueType, LessKey >::lock(), and fawkes::LockMap< KeyType, ValueType, LessKey >::unlock().
virtual void fawkes::FawkesNetworkServerThread::run | ( | ) | [inline, protected, virtual] |
Stub to see name in backtrace for easier debugging.
Reimplemented from fawkes::Thread.
Definition at line 79 of file server_thread.h.
void fawkes::FawkesNetworkServerThread::send | ( | unsigned int | to_clid, |
unsigned short int | component_id, | ||
unsigned short int | msg_id | ||
) | [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 339 of file server_thread.cpp.
References send().
void fawkes::FawkesNetworkServerThread::send | ( | unsigned int | to_clid, |
unsigned short int | component_id, | ||
unsigned short int | msg_id, | ||
void * | payload, | ||
unsigned int | payload_size | ||
) | [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 301 of file server_thread.cpp.
References send().
void fawkes::FawkesNetworkServerThread::send | ( | FawkesNetworkMessage * | msg | ) | [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 276 of file server_thread.cpp.
References fawkes::FawkesNetworkMessage::clid().
Referenced by send().
void fawkes::FawkesNetworkServerThread::send | ( | unsigned int | to_clid, |
unsigned short int | component_id, | ||
unsigned short int | msg_id, | ||
FawkesNetworkMessageContent * | content | ||
) | [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 320 of file server_thread.cpp.
References send().