fixed adding file problem
[c11concurrency-benchmarks.git] / gdax-orderbook-hpp / demo / dependencies / websocketpp-0.7.0 / examples / enriched_storage / enriched_storage.cpp
1 #include <iostream>
2 #include <websocketpp/config/asio_no_tls.hpp>
3 #include <websocketpp/server.hpp>
4
5 struct connection_data {
6     int sessionid;
7     std::string name;
8 };
9
10 struct custom_config : public websocketpp::config::asio {
11     // pull default settings from our core config
12     typedef websocketpp::config::asio core;
13     
14     typedef core::concurrency_type concurrency_type;
15     typedef core::request_type request_type;
16     typedef core::response_type response_type;
17     typedef core::message_type message_type;
18     typedef core::con_msg_manager_type con_msg_manager_type;
19     typedef core::endpoint_msg_manager_type endpoint_msg_manager_type;
20     typedef core::alog_type alog_type;
21     typedef core::elog_type elog_type;
22     typedef core::rng_type rng_type;
23     typedef core::transport_type transport_type;
24     typedef core::endpoint_base endpoint_base;
25     
26     // Set a custom connection_base class
27     typedef connection_data connection_base;
28 };
29
30 typedef websocketpp::server<custom_config> server;
31 typedef server::connection_ptr connection_ptr;
32
33 using websocketpp::connection_hdl;
34 using websocketpp::lib::placeholders::_1;
35 using websocketpp::lib::placeholders::_2;
36 using websocketpp::lib::bind;
37
38 class print_server {
39 public:
40     print_server() : m_next_sessionid(1) {
41         m_server.init_asio();
42                 
43         m_server.set_open_handler(bind(&print_server::on_open,this,::_1));
44         m_server.set_close_handler(bind(&print_server::on_close,this,::_1));
45         m_server.set_message_handler(bind(&print_server::on_message,this,::_1,::_2));
46     }
47     
48     void on_open(connection_hdl hdl) {
49         connection_ptr con = m_server.get_con_from_hdl(hdl);
50         
51         con->sessionid = m_next_sessionid++;
52     }
53     
54     void on_close(connection_hdl hdl) {
55         connection_ptr con = m_server.get_con_from_hdl(hdl);
56         
57         std::cout << "Closing connection " << con->name 
58                   << " with sessionid " << con->sessionid << std::endl;
59     }
60     
61     void on_message(connection_hdl hdl, server::message_ptr msg) {
62         connection_ptr con = m_server.get_con_from_hdl(hdl);
63         
64         if (con->name.empty()) {
65             con->name = msg->get_payload();
66             std::cout << "Setting name of connection with sessionid " 
67                       << con->sessionid << " to " << con->name << std::endl;
68         } else {
69             std::cout << "Got a message from connection " << con->name 
70                       << " with sessionid " << con->sessionid << std::endl;
71         }
72     }
73     
74     void run(uint16_t port) {
75         m_server.listen(port);
76         m_server.start_accept();
77         m_server.run();
78     }
79 private:
80     int m_next_sessionid;
81     server m_server;
82 };
83
84 int main() {
85     print_server server;
86     server.run(9002);
87 }