Pastebin launched a little side project called VERYVIRAL.com, check it out ;-) Want more features on Pastebin? Sign Up, it's FREE!
Guest

Untitled

By: a guest on Jun 13th, 2011  |  syntax: C++  |  size: 3.44 KB  |  views: 70  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #include "session.h"
  2.  
  3. #include <iostream>
  4. #include <iomanip>
  5. using namespace std;
  6.  
  7.  
  8. // -------------------------------------------------
  9.  
  10.  
  11. session::session(boost::asio::io_service& io_service)
  12. : socket_(io_service)
  13. , sqlsocket_(io_service)
  14. , resolver(io_service)
  15. {
  16. }
  17.  
  18. session::~session()
  19. {
  20.         cout << "closing session ..." << endl;
  21.         socket_.close();
  22.         sqlsocket_.close();
  23. }
  24.  
  25. tcp::socket& session::socket()
  26. {
  27.         return socket_;
  28. }
  29.  
  30. void session::start()
  31. {
  32.         //cout << "session::start()" << endl;
  33.  
  34.         // connect to the sqlserver database
  35.         tcp::resolver::query query("10.10.10.10", "1433");
  36.         tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
  37.         tcp::endpoint endpoint = *endpoint_iterator;
  38.  
  39.         sqlsocket_.async_connect(endpoint,
  40.                 boost::bind(&session::handle_sqlserver_connect, this,
  41.                 boost::asio::placeholders::error, ++endpoint_iterator));
  42. }
  43.  
  44. void session::handle_read(const boost::system::error_code& error,
  45.                                                   size_t bytes_transferred)
  46. {
  47.         //cout << "session::handle_read()" << endl;
  48.         if (!error)
  49.         {
  50.                 boost::asio::async_write(sqlsocket_,
  51.                         boost::asio::buffer(buf, bytes_transferred),
  52.                         boost::bind(&session::handle_sqlserver_write, this,
  53.                         boost::asio::placeholders::error, bytes_transferred));
  54.         }
  55.         else
  56.         {
  57.                 delete this;
  58.         }
  59. }
  60.  
  61. void session::handle_sqlserver_read(const boost::system::error_code& error,
  62.                                                                         size_t bytes_transferred)
  63. {
  64.         //cout << "session::handle_sqlserver_read()" << endl;
  65.         if (!error)
  66.         {
  67.                 boost::asio::async_write(socket_,
  68.                         boost::asio::buffer(sqlbuf, bytes_transferred),
  69.                         boost::bind(&session::handle_write, this,
  70.                         boost::asio::placeholders::error, bytes_transferred));
  71.         }
  72.         else
  73.         {
  74.                 delete this;
  75.         }
  76. }
  77.  
  78. void session::handle_write(const boost::system::error_code& error,
  79.                                                    size_t bytes_transferred)
  80. {
  81.         //cout << "session::handle_write()" << endl;
  82.         if (!error)
  83.         {
  84.                 sqlsocket_.async_read_some(boost::asio::buffer(sqlbuf, max_length),
  85.                         boost::bind(&session::handle_sqlserver_read, this,
  86.                         boost::asio::placeholders::error,
  87.                         boost::asio::placeholders::bytes_transferred));
  88.         }
  89.         else
  90.         {
  91.                 delete this;
  92.         }
  93. }
  94.  
  95. void session::handle_sqlserver_write(const boost::system::error_code& error,
  96.                                                                          size_t bytes_transferred)
  97. {
  98.         //cout << "session::handle_sqlserver_write()" << endl;
  99.         if (!error)
  100.         {
  101.                 socket_.async_read_some(boost::asio::buffer(buf, max_length),
  102.                         boost::bind(&session::handle_read, this,
  103.                         boost::asio::placeholders::error,
  104.                         boost::asio::placeholders::bytes_transferred));
  105.         }
  106.         else
  107.         {
  108.                 delete this;
  109.         }
  110. }
  111.  
  112. void session::handle_sqlserver_connect(const boost::system::error_code& error,
  113.                                                                            tcp::resolver::iterator endpoint_iterator)
  114. {
  115.         //cout << "session::handle_sqlserver_connect()" << endl;
  116.         if (!error)
  117.         {
  118.                 socket_.async_read_some(boost::asio::buffer(buf, max_length),
  119.                         boost::bind(&session::handle_read, this,
  120.                         boost::asio::placeholders::error,
  121.                         boost::asio::placeholders::bytes_transferred));
  122.  
  123.                 sqlsocket_.async_read_some(boost::asio::buffer(sqlbuf, max_length),
  124.                         boost::bind(&session::handle_sqlserver_read, this,
  125.                         boost::asio::placeholders::error,
  126.                         boost::asio::placeholders::bytes_transferred));
  127.         }
  128.         else if (endpoint_iterator != tcp::resolver::iterator())
  129.         {
  130.                 sqlsocket_.close();
  131.                 tcp::endpoint endpoint = *endpoint_iterator;
  132.                 sqlsocket_.async_connect(endpoint,
  133.                         boost::bind(&session::handle_sqlserver_connect, this,
  134.                         boost::asio::placeholders::error, ++endpoint_iterator));
  135.         }
  136. }
clone this paste RAW Paste Data