31
31
32
32
#include < websocketpp/config/debug_asio_no_tls.hpp>
33
33
34
+ // Custom logger
35
+ #include < websocketpp/logger/syslog.hpp>
36
+
34
37
#include < websocketpp/server.hpp>
35
38
36
39
#include < iostream>
37
40
38
- typedef websocketpp::server<websocketpp::config::debug_asio> server;
41
+ // //////////////////////////////////////////////////////////////////////////////
42
+ // /////////////// Custom Config for debugging custom policies //////////////////
43
+ // //////////////////////////////////////////////////////////////////////////////
44
+
45
+ struct debug_custom : public websocketpp ::config::debug_asio {
46
+ typedef debug_custom type;
47
+ typedef debug_asio base;
48
+
49
+ typedef base::concurrency_type concurrency_type;
50
+
51
+ typedef base::request_type request_type;
52
+ typedef base::response_type response_type;
53
+
54
+ typedef base::message_type message_type;
55
+ typedef base::con_msg_manager_type con_msg_manager_type;
56
+ typedef base::endpoint_msg_manager_type endpoint_msg_manager_type;
57
+
58
+ // / Custom Logging policies
59
+ /* typedef websocketpp::log::syslog<concurrency_type,
60
+ websocketpp::log::elevel> elog_type;
61
+ typedef websocketpp::log::syslog<concurrency_type,
62
+ websocketpp::log::alevel> alog_type;
63
+ */
64
+ typedef base::alog_type alog_type;
65
+ typedef base::elog_type elog_type;
66
+
67
+ typedef base::rng_type rng_type;
68
+
69
+ struct transport_config : public base ::transport_config {
70
+ typedef type::concurrency_type concurrency_type;
71
+ typedef type::alog_type alog_type;
72
+ typedef type::elog_type elog_type;
73
+ typedef type::request_type request_type;
74
+ typedef type::response_type response_type;
75
+ typedef websocketpp::transport::asio::basic_socket::endpoint
76
+ socket_type;
77
+ };
78
+
79
+ typedef websocketpp::transport::asio::endpoint<transport_config>
80
+ transport_type;
81
+
82
+ static const long timeout_open_handshake = 0 ;
83
+ };
84
+
85
+ // //////////////////////////////////////////////////////////////////////////////
86
+
87
+ typedef websocketpp::server<debug_custom> server;
39
88
40
89
using websocketpp::lib::placeholders::_1;
41
90
using websocketpp::lib::placeholders::_2;
@@ -44,6 +93,33 @@ using websocketpp::lib::bind;
44
93
// pull out the type of messages sent by our config
45
94
typedef server::message_ptr message_ptr;
46
95
96
+ bool validate (server *, websocketpp::connection_hdl) {
97
+ // sleep(6);
98
+ return true ;
99
+ }
100
+
101
+ void on_http (server* s, websocketpp::connection_hdl hdl) {
102
+ server::connection_ptr con = s->get_con_from_hdl (hdl);
103
+
104
+ std::string res = con->get_request_body ();
105
+
106
+ std::stringstream ss;
107
+ ss << " got HTTP request with " << res.size () << " bytes of body data." ;
108
+
109
+ con->set_body (ss.str ());
110
+ con->set_status (websocketpp::http::status_code::ok);
111
+ }
112
+
113
+ void on_fail (server* s, websocketpp::connection_hdl hdl) {
114
+ server::connection_ptr con = s->get_con_from_hdl (hdl);
115
+
116
+ std::cout << " Fail handler: " << con->get_ec () << " " << con->get_ec ().message () << std::endl;
117
+ }
118
+
119
+ void on_close (websocketpp::connection_hdl) {
120
+ std::cout << " Close handler" << std::endl;
121
+ }
122
+
47
123
// Define a callback to handle incoming messages
48
124
void on_message (server* s, websocketpp::connection_hdl hdl, message_ptr msg) {
49
125
std::cout << " on_message called with hdl: " << hdl.lock ().get ()
@@ -74,6 +150,12 @@ int main() {
74
150
// Register our message handler
75
151
echo_server.set_message_handler (bind (&on_message,&echo_server,::_1,::_2));
76
152
153
+ echo_server.set_http_handler (bind (&on_http,&echo_server,::_1));
154
+ echo_server.set_fail_handler (bind (&on_fail,&echo_server,::_1));
155
+ echo_server.set_close_handler (&on_close);
156
+
157
+ echo_server.set_validate_handler (bind (&validate,&echo_server,::_1));
158
+
77
159
// Listen on port 9012
78
160
echo_server.listen (9012 );
79
161
0 commit comments