diff --git a/examples/handler_switch/handler_switch.cpp b/examples/handler_switch/handler_switch.cpp new file mode 100644 index 0000000000..e877b3fe99 --- /dev/null +++ b/examples/handler_switch/handler_switch.cpp @@ -0,0 +1,42 @@ +#include + +#include +#include + +typedef websocketpp::server server; + +using websocketpp::connection_hdl; +using websocketpp::lib::placeholders::_1; +using websocketpp::lib::placeholders::_2; +using websocketpp::lib::bind; +using websocketpp::lib::ref; + +void custom_on_msg(server & s, connection_hdl hdl, server::message_ptr msg) { + std::cout << "Message sent to custom handler" << std::endl; +} + +void default_on_msg(server & s, connection_hdl hdl, server::message_ptr msg) { + std::cout << "Message sent to default handler" << std::endl; + + if (msg->get_payload() == "upgrade") { + // Upgrade our connection_hdl to a full connection_ptr + server::connection_ptr con = s.get_con_from_hdl(hdl); + + // Change the on message handler for this connection only to + // custom_on_mesage + con->set_message_handler(bind(&custom_on_msg,ref(s),::_1,::_2)); + std::cout << "Upgrading connection to custom handler" << std::endl; + } +} + +int main() { + server s; + + s.set_message_handler(bind(&default_on_msg,ref(s),::_1,::_2)); + + s.init_asio(); + s.listen(9002); + s.start_accept(); + + s.run(); +} \ No newline at end of file diff --git a/examples/simple_broadcast_server/simple_broadcast_server.cpp b/examples/simple_broadcast_server/simple_broadcast_server.cpp new file mode 100644 index 0000000000..e1686bcf7a --- /dev/null +++ b/examples/simple_broadcast_server/simple_broadcast_server.cpp @@ -0,0 +1,51 @@ +#include +#include +#include + +typedef websocketpp::server server; + +using websocketpp::connection_hdl; +using websocketpp::lib::placeholders::_1; +using websocketpp::lib::placeholders::_2; +using websocketpp::lib::bind; + +class broadcast_server { +public: + broadcast_server() { + m_server.init_asio(); + + m_server.set_open_handler(bind(&broadcast_server::on_open,this,::_1)); + m_server.set_close_handler(bind(&broadcast_server::on_close,this,::_1)); + m_server.set_message_handler(bind(&broadcast_server::on_message,this,::_1,::_2)); + } + + void on_open(connection_hdl hdl) { + m_connections.insert(hdl); + } + + void on_close(connection_hdl hdl) { + m_connections.erase(hdl); + } + + void on_message(connection_hdl hdl, server::message_ptr msg) { + for (auto it : m_connections) { + m_server.send(it,msg); + } + } + + void run(uint16_t port) { + m_server.listen(port); + m_server.start_accept(); + m_server.run(); + } +private: + typedef std::set> con_list; + + server m_server; + con_list m_connections; +}; + +int main() { + broadcast_server server; + server.run(9002); +} \ No newline at end of file