aboutsummaryrefslogtreecommitdiffstats
path: root/examples/websocket/example_ws.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/websocket/example_ws.cpp')
-rw-r--r--examples/websocket/example_ws.cpp48
1 files changed, 48 insertions, 0 deletions
diff --git a/examples/websocket/example_ws.cpp b/examples/websocket/example_ws.cpp
new file mode 100644
index 0000000..173d062
--- /dev/null
+++ b/examples/websocket/example_ws.cpp
@@ -0,0 +1,48 @@
+#include "crow.h"
+#include <unordered_set>
+#include <mutex>
+
+
+int main()
+{
+ crow::SimpleApp app;
+
+ std::mutex mtx;;
+ std::unordered_set<crow::websocket::connection*> users;
+
+ CROW_ROUTE(app, "/ws")
+ .websocket()
+ .onopen([&](crow::websocket::connection& conn){
+ CROW_LOG_INFO << "new websocket connection";
+ std::lock_guard<std::mutex> _(mtx);
+ users.insert(&conn);
+ })
+ .onclose([&](crow::websocket::connection& conn, const std::string& reason){
+ CROW_LOG_INFO << "websocket connection closed: " << reason;
+ std::lock_guard<std::mutex> _(mtx);
+ users.erase(&conn);
+ })
+ .onmessage([&](crow::websocket::connection& /*conn*/, const std::string& data, bool is_binary){
+ std::lock_guard<std::mutex> _(mtx);
+ for(auto u:users)
+ if (is_binary)
+ u->send_binary(data);
+ else
+ u->send_text(data);
+ });
+
+ CROW_ROUTE(app, "/")
+ ([]{
+ char name[256];
+ gethostname(name, 256);
+ crow::mustache::context x;
+ x["servername"] = name;
+
+ auto page = crow::mustache::load("ws.html");
+ return page.render(x);
+ });
+
+ app.port(40080)
+ .multithreaded()
+ .run();
+}