Panda3D
|
This class handles threaded delivery of datagrams to various TCP or UDP sockets. More...
#include "connectionWriter.h"
Public Member Functions | |
ConnectionWriter (ConnectionManager *manager, int num_threads, const string &thread_name=string()) | |
Creates a new ConnectionWriter with the indicated number of threads to handle output. More... | |
int | get_current_queue_size () const |
Returns the current number of things in the queue. More... | |
ConnectionManager * | get_manager () const |
Returns a pointer to the ConnectionManager object that serves this ConnectionWriter. More... | |
int | get_max_queue_size () const |
Returns the maximum size the queue is allowed to grow to. More... | |
int | get_num_threads () const |
Returns the number of threads the ConnectionWriter has been created with. More... | |
bool | get_raw_mode () const |
Returns the current setting of the raw mode flag. More... | |
int | get_tcp_header_size () const |
Returns the current setting of TCP header size. More... | |
bool | is_immediate () const |
Returns true if the writer is an immediate writer, i.e. More... | |
bool | is_valid_for_udp (const Datagram &datagram) const |
Returns true if the datagram is small enough to be sent over a UDP packet, false otherwise. More... | |
bool | send (const Datagram &datagram, const PT(Connection) &connection, bool block=false) |
Enqueues a datagram for transmittal on the indicated socket. More... | |
bool | send (const Datagram &datagram, const PT(Connection) &connection, const NetAddress &address, bool block=false) |
Enqueues a datagram for transmittal on the indicated socket. More... | |
void | set_max_queue_size (int max_size) |
Limits the number of packets that may be pending on the outbound queue. More... | |
void | set_raw_mode (bool mode) |
Sets the ConnectionWriter into raw mode (or turns off raw mode). More... | |
void | set_tcp_header_size (int tcp_header_size) |
Sets the header size of TCP packets. More... | |
void | shutdown () |
Stops all the threads and cleans them up. More... | |
Friends | |
class | ConnectionManager |
class | WriterThread |
This class handles threaded delivery of datagrams to various TCP or UDP sockets.
A ConnectionWriter may define an arbitrary number of threads (0 or more) to write its datagrams to sockets. The number of threads is specified at construction time and cannot be changed.
Definition at line 38 of file connectionWriter.h.
ConnectionWriter::ConnectionWriter | ( | ConnectionManager * | manager, |
int | num_threads, | ||
const string & | thread_name = string() |
||
) |
Creates a new ConnectionWriter with the indicated number of threads to handle output.
If num_threads is 0, all datagrams will be sent immediately instead of queueing for later transmission by a thread.
Definition at line 60 of file connectionWriter.cxx.
References Thread::is_threading_supported(), set_max_queue_size(), and shutdown().
int ConnectionWriter::get_current_queue_size | ( | ) | const |
Returns the current number of things in the queue.
Definition at line 141 of file connectionWriter.cxx.
References DatagramQueue::get_current_queue_size(), and send().
Referenced by get_max_queue_size().
ConnectionManager * ConnectionWriter::get_manager | ( | ) | const |
Returns a pointer to the ConnectionManager object that serves this ConnectionWriter.
Definition at line 253 of file connectionWriter.cxx.
References is_immediate().
Referenced by is_valid_for_udp().
int ConnectionWriter::get_max_queue_size | ( | ) | const |
Returns the maximum size the queue is allowed to grow to.
See set_max_queue_size().
Definition at line 131 of file connectionWriter.cxx.
References get_current_queue_size(), and DatagramQueue::get_max_queue_size().
Referenced by set_max_queue_size().
int ConnectionWriter::get_num_threads | ( | ) | const |
Returns the number of threads the ConnectionWriter has been created with.
Definition at line 275 of file connectionWriter.cxx.
References set_raw_mode().
Referenced by is_immediate().
bool ConnectionWriter::get_raw_mode | ( | ) | const |
Returns the current setting of the raw mode flag.
See set_raw_mode().
Definition at line 305 of file connectionWriter.cxx.
References set_tcp_header_size().
Referenced by set_raw_mode().
int ConnectionWriter::get_tcp_header_size | ( | ) | const |
Returns the current setting of TCP header size.
Definition at line 330 of file connectionWriter.cxx.
References shutdown().
Referenced by set_tcp_header_size().
bool ConnectionWriter::is_immediate | ( | ) | const |
Returns true if the writer is an immediate writer, i.e.
it has no threads.
Definition at line 264 of file connectionWriter.cxx.
References get_num_threads().
Referenced by get_manager().
bool ConnectionWriter::is_valid_for_udp | ( | const Datagram & | datagram | ) | const |
Returns true if the datagram is small enough to be sent over a UDP packet, false otherwise.
Definition at line 242 of file connectionWriter.cxx.
References Datagram::get_length(), and get_manager().
Referenced by send().
bool ConnectionWriter::send | ( | const Datagram & | datagram, |
const PT(Connection) & | connection, | ||
bool | block = false |
||
) |
Enqueues a datagram for transmittal on the indicated socket.
Since the host address is not specified with this form, this function should only be used for sending TCP packets. Use the other send() method for sending UDP packets.
Returns true if successful, false if there was an error. In the normal, threaded case, this function only returns false if the send queue is filled; it's impossible to detect a transmission error at this point.
If block is true, this will not return false if the send queue is filled; instead, it will wait until there is space available.
Definition at line 166 of file connectionWriter.cxx.
References Connection::get_socket(), DatagramQueue::insert(), and TypedObject::is_exact_type().
Referenced by get_current_queue_size(), and DatagramSinkNet::put_datagram().
bool ConnectionWriter::send | ( | const Datagram & | datagram, |
const PT(Connection) & | connection, | ||
const NetAddress & | address, | ||
bool | block = false |
||
) |
Enqueues a datagram for transmittal on the indicated socket.
This form of the function allows the specification of a destination host address, and so is appropriate for UDP packets. Use the other send() method for sending TCP packets.
Returns true if successful, false if there was an error. In the normal, threaded case, this function only returns false if the send queue is filled; it's impossible to detect a transmission error at this point.
If block is true, this will not return false if the send queue is filled; instead, it will wait until there is space available.
Definition at line 206 of file connectionWriter.cxx.
References Datagram::get_length(), Connection::get_socket(), DatagramQueue::insert(), TypedObject::is_exact_type(), is_valid_for_udp(), and NetDatagram::set_connection().
void ConnectionWriter::set_max_queue_size | ( | int | max_size | ) |
Limits the number of packets that may be pending on the outbound queue.
This only has an effect when using threads; if num_threads is 0, then all packets are sent immediately.
Definition at line 120 of file connectionWriter.cxx.
References get_max_queue_size(), and DatagramQueue::set_max_queue_size().
Referenced by ConnectionWriter().
void ConnectionWriter::set_raw_mode | ( | bool | mode | ) |
Sets the ConnectionWriter into raw mode (or turns off raw mode).
In raw mode, datagrams are not sent along with their headers; the bytes in the datagram are simply sent down the pipe.
Setting the ConnectionWriter to raw mode must be done with care. This can only be done when the matching ConnectionReader is also set to raw mode, or when the ConnectionWriter is communicating to a process that does not expect datagrams.
Definition at line 294 of file connectionWriter.cxx.
References get_raw_mode().
Referenced by get_num_threads().
void ConnectionWriter::set_tcp_header_size | ( | int | tcp_header_size | ) |
Sets the header size of TCP packets.
At the present, legal values for this are 0, 2, or 4; this specifies the number of bytes to use encode the datagram length at the start of each TCP datagram. Sender and receiver must independently agree on this.
Definition at line 319 of file connectionWriter.cxx.
References get_tcp_header_size().
Referenced by get_raw_mode().
void ConnectionWriter::shutdown | ( | ) |
Stops all the threads and cleans them up.
This is called automatically by the destructor, but it may be called explicitly before destruction.
Definition at line 342 of file connectionWriter.cxx.
References Thread::consider_yield(), DatagramQueue::extract(), and DatagramQueue::shutdown().
Referenced by ConnectionWriter(), and get_tcp_header_size().