2022-03-09 00:28:31 +08:00
|
|
|
#pragma once
|
|
|
|
#include <websocketpp/config/asio_no_tls.hpp>
|
|
|
|
#include <websocketpp/server.hpp>
|
|
|
|
#include <iostream>
|
|
|
|
#include <thread>
|
|
|
|
#include <map>
|
|
|
|
#include <mutex>
|
|
|
|
#include <functional>
|
|
|
|
|
|
|
|
typedef websocketpp::server<websocketpp::config::asio> WsServer;
|
|
|
|
|
|
|
|
|
|
|
|
using websocketpp::lib::placeholders::_1;
|
|
|
|
using websocketpp::lib::placeholders::_2;
|
|
|
|
using websocketpp::lib::bind;
|
|
|
|
typedef WsServer::message_ptr message_ptr;
|
|
|
|
|
|
|
|
|
|
|
|
class WebsocketServer {
|
|
|
|
public:
|
2022-03-14 00:05:00 +08:00
|
|
|
|
2022-03-13 21:41:02 +08:00
|
|
|
typedef std::function<void(std::string addr, uint32_t port)> OnNewConnectionHanlder;
|
|
|
|
typedef std::function<void(std::string addr, uint32_t port)> OnConnectionCloseHanlder;
|
|
|
|
typedef std::function<void(std::string addr, uint32_t port,std::string message)> OnMessageHanlder;
|
|
|
|
|
|
|
|
std::string Url();
|
|
|
|
uint32_t Port();
|
2022-03-09 00:28:31 +08:00
|
|
|
WebsocketServer(std::string server,uint32_t port);
|
2022-03-14 00:05:00 +08:00
|
|
|
~WebsocketServer();
|
2022-03-09 00:28:31 +08:00
|
|
|
friend void on_new_connection(WebsocketServer* s, websocketpp::connection_hdl hdl);
|
|
|
|
friend void on_message(WebsocketServer* s, websocketpp::connection_hdl hdl, message_ptr msg);
|
|
|
|
friend void on_connection_close(WebsocketServer* s, websocketpp::connection_hdl hdl);
|
|
|
|
int SendData(uint32_t,const char *data,int len,websocketpp::frame::opcode::value);
|
|
|
|
int SendDataAllClient(const char *data,int len,websocketpp::frame::opcode::value);
|
2022-03-13 21:41:02 +08:00
|
|
|
void SetOnNewConnectionHanlder(OnNewConnectionHanlder);
|
|
|
|
void SetOnConnectionCloseHanlder(OnConnectionCloseHanlder);
|
|
|
|
void SetOnMessageHanlder(OnMessageHanlder);
|
2022-03-09 00:28:31 +08:00
|
|
|
private:
|
|
|
|
std::string m_url; // 地址
|
|
|
|
uint32_t m_port; // url
|
|
|
|
WsServer *m_server;
|
|
|
|
std::thread *m_thread;
|
|
|
|
std::mutex m_mutex;
|
2022-03-13 21:41:02 +08:00
|
|
|
OnNewConnectionHanlder m_on_connection;
|
|
|
|
OnConnectionCloseHanlder m_on_close;
|
|
|
|
OnMessageHanlder m_on_message;
|
2022-03-09 00:28:31 +08:00
|
|
|
std::map<uint32_t,websocketpp::connection_hdl> m_clients;
|
|
|
|
};
|
|
|
|
|
|
|
|
|