#include <dashel.h>
Public Types | |
typedef std::set< Stream * > | StreamsSet |
A list of streams. | |
Public Member Functions | |
void | closeStream (Stream *stream) |
Stream * | connect (const std::string &target) |
Hub (const bool resolveIncomingNames=true) | |
void | lock () |
void | run () |
bool | step (const int timeout=0) |
void | stop () |
Stops running, subclasses or external code may call this function, that is the only thread-safe function of the Hub. | |
void | unlock () |
virtual | ~Hub () |
Destructor, closes all connections. | |
Public Attributes | |
const bool | resolveIncomingNames |
Whether Dashel should try to resolve the peer's hostname of incoming TCP connections. | |
Protected Member Functions | |
virtual void | connectionClosed (Stream *, bool) |
virtual void | connectionCreated (Stream *) |
virtual void | incomingData (Stream *) |
Protected Attributes | |
StreamsSet | dataStreams |
All our streams that transfer data (in opposition to streams that just listen for data). | |
Private Attributes | |
void * | hTerminate |
Set when this thing goes down. | |
StreamsSet | streams |
All our streams. | |
void * | streamsLock |
Platform-dependant mutex to protect access to streams. |
The central place where to create, destroy, and synchronize streams. To create a client connection, users of the library have to subclass Hub and implement incomingConnection(), incomingData(), and connectionClosed().
typedef std::set<Stream*> Dashel::Hub::StreamsSet |
Dashel::Hub::Hub | ( | const bool | resolveIncomingNames = true | ) |
Constructor.
resolveIncomingNames | if true, try to resolve the peer's hostname of incoming TCP connections |
Definition at line 1049 of file dashel-posix.cpp.
Dashel::Hub::~Hub | ( | ) | [virtual] |
Destructor, closes all connections.
Definition at line 1065 of file dashel-posix.cpp.
void Dashel::Hub::closeStream | ( | Stream * | stream | ) |
Close a stream, remove it from the Hub, and delete it. If the stream is not present in the Hub, it is deleted nevertheless. Note that connectionClosed() is not called by closeStream() and that you must not call closeStream(s) from inside connectionClosed(s) for the same stream.
stream | stream to remove |
Definition at line 292 of file dashel-common.cpp.
Stream * Dashel::Hub::connect | ( | const std::string & | target | ) |
Listens for incoming connections on a target. Some targets, such as a serial ports and files may directly generate a new connection; others, such as network interfaces, will only generate news connections when a peer connects. May throw a ConnectionError exception if the target does not exists or is not ready.
target | destination to listen connections from (see Section Targets Naming) |
Definition at line 1083 of file dashel-posix.cpp.
virtual void Dashel::Hub::connectionClosed | ( | Stream * | , |
bool | |||
) | [inline, protected, virtual] |
Called when target closes connection. The only valid method to call on the stream is getTargetName(), input/output operations are forbidden. You must not call closeStream(stream) from within this method for the same stream as the one passed as parameter. Subclass can implement this method. Called with the stream lock held.
stream | stream to the target. |
abnormal | whether the connection was closed during step (abnormal == false) or when an operation was performed (abnormal == true) |
Reimplemented in ChatClient, PingClient, ChatServer, MicroTerm, and PingServer.
virtual void Dashel::Hub::connectionCreated | ( | Stream * | ) | [inline, protected, virtual] |
Called when any data connection is created. It is not called when a listening connection (eg tcpin:) is created. If the stream is closed during this method, an exception occurs: the caller is responsible to handle it. The stream is already inserted in the stream list when this function is called. Subclass can implement this method. Called with the stream lock held.
stream | stream to the target |
Reimplemented in ChatClient, PingClient, ChatServer, MicroTerm, and PingServer.
virtual void Dashel::Hub::incomingData | ( | Stream * | ) | [inline, protected, virtual] |
Called when data is available for reading on the stream. If the stream is closed during this method, an exception occurs: Hub stops the execution of this method and calls connectionClosed(); objects dynamically allocated must thus be handled with auto_ptr. If step() is used, subclass must implement this method and call read at least once. Called with the stream lock held.
stream | stream to the target |
Reimplemented in ChatClient, PingClient, ChatServer, MicroTerm, and PingServer.
void Dashel::Hub::lock | ( | ) |
Block any hub processing so another thread can access the streams safely. Currently only implemented on POSIX platform, no-op on others.
Definition at line 1322 of file dashel-posix.cpp.
void Dashel::Hub::run | ( | ) |
Runs and returns only when an external event requests the application to stop.
Definition at line 1114 of file dashel-posix.cpp.
bool Dashel::Hub::step | ( | const int | timeout = 0 | ) |
Waits for data from the transfers streams or connections from the listening streams. Read all available data.
timeout | if -1, waits until data arrive. If 0, do not wait, just poll for activity. If positive, waits at maximum timeout ms. |
Definition at line 1119 of file dashel-posix.cpp.
void Dashel::Hub::stop | ( | ) |
Stops running, subclasses or external code may call this function, that is the only thread-safe function of the Hub.
Definition at line 1332 of file dashel-posix.cpp.
void Dashel::Hub::unlock | ( | ) |
Release the lock aquired by lock(). Currently only implemented on POSIX platform, no-op on others.
Definition at line 1327 of file dashel-posix.cpp.
StreamsSet Dashel::Hub::dataStreams [protected] |
void* Dashel::Hub::hTerminate [private] |
const bool Dashel::Hub::resolveIncomingNames |
StreamsSet Dashel::Hub::streams [private] |
void* Dashel::Hub::streamsLock [private] |