|
SockIt
|
#include <NetworkThread.h>
Public Member Functions | |
| NetworkThread () | |
| virtual | ~NetworkThread () |
| boost::shared_ptr< TcpServer > | create_tcp_server (int port, boost::optional< map< string, string > > options) |
| boost::shared_ptr< TcpClient > | create_tcp_client (const string &host, int port, boost::optional< map< string, string > > options) |
| boost::shared_ptr< UdpServer > | create_udp_server (int port, boost::optional< map< string, string > > options) |
| boost::shared_ptr< UdpClient > | create_udp_client (const string &host, int port, boost::optional< map< string, string > > options) |
Private Member Functions | |
| void | run () |
Private Attributes | |
| string | logger_category |
| boost::asio::io_service | io_service |
| boost::thread | background_thread |
| set< boost::shared_ptr < UdpClient > > | udp_clients |
| set< boost::shared_ptr < UdpServer > > | udp_servers |
| set< boost::shared_ptr < TcpClient > > | tcp_clients |
| set< boost::shared_ptr < TcpServer > > | tcp_servers |
Class representing a high-level thread of computation for the plugin. This class a single background thread associated with it to perform asynchronous I/O for all clients and servers created from this (high-level) thread.
This class also exposes four methods to Javascript to allow creating servers and clients whose I/O will be performed on this NetworkThread.
Definition at line 37 of file NetworkThread.h.
| NetworkThread::NetworkThread | ( | ) |
Creates a new network thread, registers its functions to the Javascript, and starts up the background thread.
Definition at line 10 of file NetworkThread.cpp.
References background_thread, create_tcp_client(), create_tcp_server(), create_udp_client(), create_udp_server(), Logger::info(), logger_category, Logger::NO_PORT, and run().
:
logger_category("NETWORK THREAD")
{
// No initialization required for the logger
Logger::info("Network thread initialized", Logger::NO_PORT, logger_category);
// Register root methods for creating servers & clients
registerMethod("createUdpClient", make_method(this, &NetworkThread::create_udp_client));
registerMethod("createUdpServer", make_method(this, &NetworkThread::create_udp_server));
registerMethod("createTcpClient", make_method(this, &NetworkThread::create_tcp_client));
registerMethod("createTcpServer", make_method(this, &NetworkThread::create_tcp_server));
// Start the I/O service running in the background
background_thread = boost::thread(boost::bind(&NetworkThread::run, this));
}
| NetworkThread::~NetworkThread | ( | ) | [virtual] |
Destroys this network thread by stopping the background I/O service and joining on the background thread.
Definition at line 26 of file NetworkThread.cpp.
References background_thread, io_service, logger_category, Logger::NO_PORT, tcp_clients, tcp_servers, udp_clients, udp_servers, and Logger::warn().
{
// Stop the IO service, and wait for the background thread to exit, log (but don't do anything) if there's an error
try
{
io_service.stop();
background_thread.join();
}
catch (std::exception & error)
{
Logger::warn("Warning, improperly shutdown network thread IO service: '" + string(error.what()) + "'",
Logger::NO_PORT, logger_category);
}
tcp_clients.clear();
tcp_servers.clear();
udp_clients.clear();
udp_servers.clear();
}
| boost::shared_ptr< TcpClient > NetworkThread::create_tcp_client | ( | const string & | host, |
| int | port, | ||
| boost::optional< map< string, string > > | options | ||
| ) |
Creates a new TCP client on this NetworkThread.
| host | The hostname to which this TCP client will connect |
| port | The port on the remote host to which this client should connect |
| options | A map of options to specify the behavior of this object. |
Definition at line 63 of file NetworkThread.cpp.
References Logger::info(), io_service, logger_category, Logger::NO_PORT, and tcp_clients.
Referenced by SockItAPI::create_tcp_client(), and NetworkThread().
{
Logger::info(
"Spawning TCP client to '" + boost::lexical_cast<string>(host) + ":" + boost::lexical_cast<string>(port)
+ "'", Logger::NO_PORT, logger_category);
if (options)
{
boost::shared_ptr<TcpClient> new_client(new TcpClient(host, port, io_service, *options));
tcp_clients.insert(new_client);
return new_client;
}
boost::shared_ptr<TcpClient> new_client(new TcpClient(host, port, io_service));
tcp_clients.insert(new_client);
return new_client;
}
| boost::shared_ptr< TcpServer > NetworkThread::create_tcp_server | ( | int | port, |
| boost::optional< map< string, string > > | options | ||
| ) |
Creates a new TCP server on this NetworkThread.
| port | The port on which this new TCP server should listen |
| options | A map of options to specify the behavior of this object. |
Definition at line 46 of file NetworkThread.cpp.
References Logger::info(), io_service, logger_category, Logger::NO_PORT, and tcp_servers.
Referenced by SockItAPI::create_tcp_server(), and NetworkThread().
{
Logger::info("Spawning TCP server on port = " + boost::lexical_cast<string>(port), Logger::NO_PORT,
logger_category);
if (options)
{
boost::shared_ptr<TcpServer> new_server(new TcpServer(port, io_service, *options));
tcp_servers.insert(new_server);
return new_server;
}
boost::shared_ptr<TcpServer> new_server(new TcpServer(port, io_service));
tcp_servers.insert(new_server);
return new_server;
}
| boost::shared_ptr< UdpClient > NetworkThread::create_udp_client | ( | const string & | host, |
| int | port, | ||
| boost::optional< map< string, string > > | options | ||
| ) |
Creates a new UDP client on this NetworkThread.
| host | The hostname to which this UDP client will connect |
| port | The port on the remote host to which this client should connect |
| options | A map of options to specify the behavior of this object. |
Definition at line 99 of file NetworkThread.cpp.
References Logger::info(), io_service, logger_category, Logger::NO_PORT, and udp_clients.
Referenced by SockItAPI::create_udp_client(), and NetworkThread().
{
Logger::info(
"Spawning TCP client to '" + boost::lexical_cast<string>(host) + ":" + boost::lexical_cast<
string>(port) + "'", Logger::NO_PORT, logger_category);
if (options)
{
boost::shared_ptr<UdpClient> new_client(new UdpClient(host, port, io_service, *options));
udp_clients.insert(new_client);
return new_client;
}
boost::shared_ptr<UdpClient> new_client(new UdpClient(host, port, io_service));
udp_clients.insert(new_client);
return new_client;
}
| boost::shared_ptr< UdpServer > NetworkThread::create_udp_server | ( | int | port, |
| boost::optional< map< string, string > > | options | ||
| ) |
Creates a new UDP server on this NetworkThread.
| port | The port on which this new UDP server should listen |
| options | A map of options to specify the behavior of this object. |
Definition at line 82 of file NetworkThread.cpp.
References Logger::info(), io_service, logger_category, Logger::NO_PORT, and udp_servers.
Referenced by SockItAPI::create_udp_server(), and NetworkThread().
{
Logger::info("Spawning UDP server on port = " + boost::lexical_cast<string>(port), Logger::NO_PORT,
logger_category);
if (options)
{
boost::shared_ptr<UdpServer> new_server(new UdpServer(port, io_service, *options));
udp_servers.insert(new_server);
return new_server;
}
boost::shared_ptr<UdpServer> new_server(new UdpServer(port, io_service));
udp_servers.insert(new_server);
return new_server;
}
| void NetworkThread::run | ( | ) | [private] |
A helper method in which the background thread will run. This method simply starts the I/O service, and returns once the I/O service is stopped.
Definition at line 118 of file NetworkThread.cpp.
References Logger::error(), io_service, logger_category, and Logger::NO_PORT.
Referenced by NetworkThread().
{
boost::asio::io_service::work work(io_service);
try
{
io_service.run();
}
catch (std::exception & error)
{
// Catch any exception and dump it to the log
Logger::error("Error running network thread: '" + string(error.what()) + "'", Logger::NO_PORT, logger_category);
}
}
boost::thread NetworkThread::background_thread [private] |
The background thread which launches the I/O service, and exits when the I/O service is stopped.
Definition at line 113 of file NetworkThread.h.
Referenced by NetworkThread(), and ~NetworkThread().
boost::asio::io_service NetworkThread::io_service [private] |
The boost I/O service to be shared between all clients and servers created on this NetworkThread, which will be used to perform asynchronous I/O.
Definition at line 108 of file NetworkThread.h.
Referenced by create_tcp_client(), create_tcp_server(), create_udp_client(), create_udp_server(), run(), and ~NetworkThread().
string NetworkThread::logger_category [private] |
The category string for a network thread
Definition at line 96 of file NetworkThread.h.
Referenced by create_tcp_client(), create_tcp_server(), create_udp_client(), create_udp_server(), NetworkThread(), run(), and ~NetworkThread().
set<boost::shared_ptr<TcpClient> > NetworkThread::tcp_clients [private] |
Set of all tcp clients 'on' this thread
Definition at line 122 of file NetworkThread.h.
Referenced by create_tcp_client(), and ~NetworkThread().
set<boost::shared_ptr<TcpServer> > NetworkThread::tcp_servers [private] |
Set of all tcp servers 'on' this thread
Definition at line 125 of file NetworkThread.h.
Referenced by create_tcp_server(), and ~NetworkThread().
set<boost::shared_ptr<UdpClient> > NetworkThread::udp_clients [private] |
Set of all udp clients 'on' this thread
Definition at line 116 of file NetworkThread.h.
Referenced by create_udp_client(), and ~NetworkThread().
set<boost::shared_ptr<UdpServer> > NetworkThread::udp_servers [private] |
Set of all udp servers 'on' this thread
Definition at line 119 of file NetworkThread.h.
Referenced by create_udp_server(), and ~NetworkThread().
1.7.3