2 #include <websocketpp/config/asio_no_tls.hpp>
3 #include <websocketpp/server.hpp>
5 struct connection_data {
10 struct custom_config : public websocketpp::config::asio {
11 // pull default settings from our core config
12 typedef websocketpp::config::asio core;
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;
26 // Set a custom connection_base class
27 typedef connection_data connection_base;
30 typedef websocketpp::server<custom_config> server;
31 typedef server::connection_ptr connection_ptr;
33 using websocketpp::connection_hdl;
34 using websocketpp::lib::placeholders::_1;
35 using websocketpp::lib::placeholders::_2;
36 using websocketpp::lib::bind;
40 print_server() : m_next_sessionid(1) {
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));
48 void on_open(connection_hdl hdl) {
49 connection_ptr con = m_server.get_con_from_hdl(hdl);
51 con->sessionid = m_next_sessionid++;
54 void on_close(connection_hdl hdl) {
55 connection_ptr con = m_server.get_con_from_hdl(hdl);
57 std::cout << "Closing connection " << con->name
58 << " with sessionid " << con->sessionid << std::endl;
61 void on_message(connection_hdl hdl, server::message_ptr msg) {
62 connection_ptr con = m_server.get_con_from_hdl(hdl);
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;
69 std::cout << "Got a message from connection " << con->name
70 << " with sessionid " << con->sessionid << std::endl;
74 void run(uint16_t port) {
75 m_server.listen(port);
76 m_server.start_accept();