mirror of
https://github.com/Sani7/remote-ui.git
synced 2026-10-26 21:51:13 +01:00
Using broadcast server example for server
This commit is contained in:
+40
-6
@@ -1,6 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <functional>
|
||||
#include <set>
|
||||
|
||||
#include <websocketpp/config/asio_no_tls.hpp>
|
||||
#include <websocketpp/server.hpp>
|
||||
@@ -9,17 +10,50 @@ typedef websocketpp::server<websocketpp::config::asio> Server;
|
||||
|
||||
using websocketpp::lib::placeholders::_1;
|
||||
using websocketpp::lib::placeholders::_2;
|
||||
using websocketpp::lib::bind;
|
||||
|
||||
/* on_open insert connection_hdl into channel
|
||||
* on_close remove connection_hdl from channel
|
||||
* on_message queue send to all channels
|
||||
*/
|
||||
|
||||
enum action_type {
|
||||
SUBSCRIBE,
|
||||
UNSUBSCRIBE,
|
||||
MESSAGE
|
||||
};
|
||||
|
||||
struct action {
|
||||
action(action_type t, websocketpp::connection_hdl h) : type(t), hdl(h) {}
|
||||
action(action_type t, websocketpp::connection_hdl h, Server::message_ptr m)
|
||||
: type(t), hdl(h), msg(m) {}
|
||||
|
||||
action_type type;
|
||||
websocketpp::connection_hdl hdl;
|
||||
Server::message_ptr msg;
|
||||
};
|
||||
|
||||
class Websocket
|
||||
{
|
||||
public:
|
||||
Websocket(uint16_t port, std::function<std::string(std::string)> on_message);
|
||||
Websocket(uint16_t port, std::function<std::string(std::string)> on_message, std::function<std::string()> on_update);
|
||||
void run();
|
||||
void stop();
|
||||
void process_messages();
|
||||
private:
|
||||
void on_message(Server* s, websocketpp::connection_hdl hdl, Server::message_ptr msg);
|
||||
Server server;
|
||||
std::function<std::string(std::string)> p_on_message;
|
||||
uint16_t p_port;
|
||||
void on_open(websocketpp::connection_hdl hdl);
|
||||
void on_close(websocketpp::connection_hdl hdl);
|
||||
void on_message(websocketpp::connection_hdl hdl, Server::message_ptr msg);
|
||||
private:
|
||||
std::function<std::string(std::string)> m_on_message;
|
||||
std::function<std::string()> m_on_update;
|
||||
Server m_server;
|
||||
uint16_t m_port;
|
||||
typedef std::set<websocketpp::connection_hdl,std::owner_less<websocketpp::connection_hdl>> con_list;
|
||||
con_list m_connections;
|
||||
|
||||
std::queue<action> m_actions;
|
||||
|
||||
std::mutex m_action_lock;
|
||||
std::mutex m_connection_lock;
|
||||
std::condition_variable m_action_cond;
|
||||
};
|
||||
Reference in New Issue
Block a user