#include "session.h" #include #include using namespace std; // ------------------------------------------------- session::session(boost::asio::io_service& io_service) : socket_(io_service) , sqlsocket_(io_service) , resolver(io_service) { } session::~session() { cout << "closing session ..." << endl; socket_.close(); sqlsocket_.close(); } tcp::socket& session::socket() { return socket_; } void session::start() { //cout << "session::start()" << endl; // connect to the sqlserver database tcp::resolver::query query("10.10.10.10", "1433"); tcp::resolver::iterator endpoint_iterator = resolver.resolve(query); tcp::endpoint endpoint = *endpoint_iterator; sqlsocket_.async_connect(endpoint, boost::bind(&session::handle_sqlserver_connect, this, boost::asio::placeholders::error, ++endpoint_iterator)); } void session::handle_read(const boost::system::error_code& error, size_t bytes_transferred) { //cout << "session::handle_read()" << endl; if (!error) { boost::asio::async_write(sqlsocket_, boost::asio::buffer(buf, bytes_transferred), boost::bind(&session::handle_sqlserver_write, this, boost::asio::placeholders::error, bytes_transferred)); } else { delete this; } } void session::handle_sqlserver_read(const boost::system::error_code& error, size_t bytes_transferred) { //cout << "session::handle_sqlserver_read()" << endl; if (!error) { boost::asio::async_write(socket_, boost::asio::buffer(sqlbuf, bytes_transferred), boost::bind(&session::handle_write, this, boost::asio::placeholders::error, bytes_transferred)); } else { delete this; } } void session::handle_write(const boost::system::error_code& error, size_t bytes_transferred) { //cout << "session::handle_write()" << endl; if (!error) { sqlsocket_.async_read_some(boost::asio::buffer(sqlbuf, max_length), boost::bind(&session::handle_sqlserver_read, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); } else { delete this; } } void session::handle_sqlserver_write(const boost::system::error_code& error, size_t bytes_transferred) { //cout << "session::handle_sqlserver_write()" << endl; if (!error) { socket_.async_read_some(boost::asio::buffer(buf, max_length), boost::bind(&session::handle_read, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); } else { delete this; } } void session::handle_sqlserver_connect(const boost::system::error_code& error, tcp::resolver::iterator endpoint_iterator) { //cout << "session::handle_sqlserver_connect()" << endl; if (!error) { socket_.async_read_some(boost::asio::buffer(buf, max_length), boost::bind(&session::handle_read, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); sqlsocket_.async_read_some(boost::asio::buffer(sqlbuf, max_length), boost::bind(&session::handle_sqlserver_read, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); } else if (endpoint_iterator != tcp::resolver::iterator()) { sqlsocket_.close(); tcp::endpoint endpoint = *endpoint_iterator; sqlsocket_.async_connect(endpoint, boost::bind(&session::handle_sqlserver_connect, this, boost::asio::placeholders::error, ++endpoint_iterator)); } }