00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include <asio.hpp>
00012 #include <boost/bind.hpp>
00013 #include <boost/lexical_cast.hpp>
00014 #include <iostream>
00015 #include <vector>
00016 #include "connection.hpp"
00017 #include <boost/serialization/vector.hpp>
00018 #include "stock.hpp"
00019
00020 namespace s11n_example {
00021
00023 class server
00024 {
00025 public:
00028 server(asio::io_service& io_service, unsigned short port)
00029 : acceptor_(io_service,
00030 asio::ip::tcp::endpoint(asio::ip::tcp::v4(), port))
00031 {
00032
00033 stock s;
00034 s.code = "ABC";
00035 s.name = "A Big Company";
00036 s.open_price = 4.56;
00037 s.high_price = 5.12;
00038 s.low_price = 4.33;
00039 s.last_price = 4.98;
00040 s.buy_price = 4.96;
00041 s.buy_quantity = 1000;
00042 s.sell_price = 4.99;
00043 s.sell_quantity = 2000;
00044 stocks_.push_back(s);
00045 s.code = "DEF";
00046 s.name = "Developer Entertainment Firm";
00047 s.open_price = 20.24;
00048 s.high_price = 22.88;
00049 s.low_price = 19.50;
00050 s.last_price = 19.76;
00051 s.buy_price = 19.72;
00052 s.buy_quantity = 34000;
00053 s.sell_price = 19.85;
00054 s.sell_quantity = 45000;
00055 stocks_.push_back(s);
00056
00057
00058 connection_ptr new_conn(new connection(acceptor_.io_service()));
00059 acceptor_.async_accept(new_conn->socket(),
00060 boost::bind(&server::handle_accept, this,
00061 asio::placeholders::error, new_conn));
00062 }
00063
00065 void handle_accept(const asio::error_code& e, connection_ptr conn)
00066 {
00067 if (!e)
00068 {
00069
00070
00071
00072 conn->async_write(stocks_,
00073 boost::bind(&server::handle_write, this,
00074 asio::placeholders::error, conn));
00075
00076
00077 connection_ptr new_conn(new connection(acceptor_.io_service()));
00078 acceptor_.async_accept(new_conn->socket(),
00079 boost::bind(&server::handle_accept, this,
00080 asio::placeholders::error, new_conn));
00081 }
00082 else
00083 {
00084
00085
00086
00087 std::cerr << e.message() << std::endl;
00088 }
00089 }
00090
00092 void handle_write(const asio::error_code& e, connection_ptr conn)
00093 {
00094
00095
00096 }
00097
00098 private:
00100 asio::ip::tcp::acceptor acceptor_;
00101
00103 std::vector<stock> stocks_;
00104 };
00105
00106 }
00107
00108 int main(int argc, char* argv[])
00109 {
00110 try
00111 {
00112
00113 if (argc != 2)
00114 {
00115 std::cerr << "Usage: server <port>" << std::endl;
00116 return 1;
00117 }
00118 unsigned short port = boost::lexical_cast<unsigned short>(argv[1]);
00119
00120 asio::io_service io_service;
00121 s11n_example::server server(io_service, port);
00122 io_service.run();
00123 }
00124 catch (std::exception& e)
00125 {
00126 std::cerr << e.what() << std::endl;
00127 }
00128
00129 return 0;
00130 }