From 7d765321654d844256e2315c6bc1626f995554cc Mon Sep 17 00:00:00 2001 From: Peter Thorson Date: Sat, 2 Feb 2013 10:14:59 -0600 Subject: [PATCH] adds some documentation examples --- docs/simple_broadcast_server.cpp | 52 +++++++++++++++++++++++ docs/simple_count_server_thread.cpp | 65 +++++++++++++++++++++++++++++ 2 files changed, 117 insertions(+) create mode 100644 docs/simple_broadcast_server.cpp create mode 100644 docs/simple_count_server_thread.cpp diff --git a/docs/simple_broadcast_server.cpp b/docs/simple_broadcast_server.cpp new file mode 100644 index 0000000000..504a8c94c6 --- /dev/null +++ b/docs/simple_broadcast_server.cpp @@ -0,0 +1,52 @@ +#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 diff --git a/docs/simple_count_server_thread.cpp b/docs/simple_count_server_thread.cpp new file mode 100644 index 0000000000..9d2fed2278 --- /dev/null +++ b/docs/simple_count_server_thread.cpp @@ -0,0 +1,65 @@ +#include +#include +#include +#include + +#include +#include + +typedef websocketpp::server server; + +using websocketpp::connection_hdl; + +class count_server { +public: + count_server() : m_count(0) { + m_server.init_asio(); + + m_server.set_open_handler(bind(&count_server::on_open,this,_1)); + m_server.set_close_handler(bind(&count_server::on_close,this,_1)); + } + + void on_open(connection_hdl hdl) { + std::lock_guard lock(m_mutex); + m_connections.insert(hdl); + } + + void on_close(connection_hdl hdl) { + std::lock_guard lock(m_mutex); + m_connections.erase(hdl); + } + + void count() { + while (1) { + sleep(1); + m_count++; + + std::stringstream ss; + ss << m_count; + + std::lock_guard lock(m_mutex); + for (auto it : m_connections) { + m_server.send(it,ss.str(),websocketpp::frame::opcode::text); + } + } + } + + void run(uint16_t port) { + m_server.listen(port); + m_server.start_accept(); + m_server.run(); + } +private: + typedef std::set> con_list; + + int m_count; + server m_server; + con_list m_connections; + std::mutex m_mutex; +}; + +int main() { + count_server server; + std::thread t(std::bind(&count_server::count,&server)); + server.run(9002); +} \ No newline at end of file