| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- #include "WebSocketServer.h"
- #include "Log.h"
- #include <json/json.h>
- CWebSocketServer::CWebSocketServer()
- {
- // Set logging settings
- /*m_endpoint.set_error_channels(websocketpp::log::elevel::all);*/
- /*m_endpoint.set_access_channels(websocketpp::log::alevel::all ^ websocketpp::log::alevel::frame_payload);*/
- m_endpoint.set_access_channels(websocketpp::log::alevel::none ^ websocketpp::log::alevel::none);
- // Register our message handler
- m_endpoint.set_message_handler(bind(&CWebSocketServer::on_message, this, &m_endpoint, std::placeholders::_1, std::placeholders::_2));
- m_endpoint.set_open_handler(bind(&CWebSocketServer::on_open, this, &m_endpoint, std::placeholders::_1));
- m_endpoint.set_close_handler(bind(&CWebSocketServer::on_close, this, &m_endpoint, std::placeholders::_1));
- m_endpoint.set_fail_handler(bind(&CWebSocketServer::on_fail, this, &m_endpoint, std::placeholders::_1));
- m_endpoint.init_asio();
- m_endpoint.set_reuse_addr(true);
- m_endpoint.start_perpetual();
- }
- CWebSocketServer::~CWebSocketServer()
- {
- m_endpoint.stop_perpetual();
- if (!m_endpoint.stopped()) {
- m_endpoint.stop();
- }
- }
- bool CWebSocketServer::init(uint16_t port)
- {
- m_port = port;
- try
- {
- m_endpoint.listen(m_port);
- // Queues a connection accept operation
- m_endpoint.start_accept();
- }
- catch (const std::exception& e)
- {
- LOG_ERROR_S(e.what());
- return false;
- }
- return true;
- }
- bool CWebSocketServer::sendMsg(websocketpp::connection_hdl hdl, string msg)
- {
- try
- {
- websocketpp::frame::opcode::value op = websocketpp::frame::opcode::value::TEXT;
- m_endpoint.send(hdl, msg, op);
- LOG_INFO("消息发送到坐席成功,[%s]",msg.c_str());
- }
- catch (websocketpp::exception const & e) {
- stringstream str;
- str << "Echo failed because: "
- << "(" << e.what() << ")";
- LOG_ERROR_S(str.str());
- LOG_ERROR("消息发送到坐席失败,[%s]", msg.c_str());
- return false;
- }
-
- return true;
- }
- void CWebSocketServer::run()
- {
- // Start the Asio io_service run loop
- m_endpoint.run();
- }
- void CWebSocketServer::close(websocketpp::connection_hdl hdl)
- {
- m_endpoint.close(hdl, websocketpp::close::status::normal, "123");
- }
- void CWebSocketServer::stop()
- {
- if (!m_endpoint.stopped()) {
- m_endpoint.stop();
- }
- }
- // Define a callback to handle incoming messages
- void CWebSocketServer::on_message(server* s, websocketpp::connection_hdl hdl, message_ptr msg)
- {
- string msgInfo;
- msgInfo = msg->get_payload();
- stringstream str;
- str << "on_message called with hdl: " << hdl.lock().get()
- << " and message: " <<
- msgInfo << s->get_con_from_hdl(hdl)->get_remote_endpoint();
- LOG_DEBUG_S(str.str());
- if (this->pRecvFun != nullptr)
- this->pRecvFun(hdl, msgInfo); // 收到消息回调函数
- }
- void CWebSocketServer::on_open(server* s, websocketpp::connection_hdl hdl) {
- stringstream str;
- str << "on_open called with hdl: " << hdl.lock().get()
- << s->get_con_from_hdl(hdl)->get_remote_endpoint();
- LOG_DEBUG_S(str.str());
- }
- void CWebSocketServer::on_close(server* s, websocketpp::connection_hdl hdl) {
- stringstream str;
- str << "on_close called with hdl: " << hdl.lock().get()
- << s->get_con_from_hdl(hdl)->get_remote_endpoint();
- LOG_DEBUG_S(str.str());
- if (this->pCloseFun != nullptr)
- this->pCloseFun(hdl); // 连接断开回调函数
- }
- void CWebSocketServer::on_fail(server* s, websocketpp::connection_hdl hdl)
- {
- stringstream str;
- str << "on_fail called with hdl: " << hdl.lock().get()
- << s->get_con_from_hdl(hdl)->get_remote_endpoint();
- LOG_DEBUG_S(str.str());
- }
|