From 9e732ca4657eec7ed42bd4f5aacb7ca4fecaec7d Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期四, 10 七月 2025 15:57:17 +0800
Subject: [PATCH] 优化:Notch测量计算流程,使用局部变量提升调试效率,修复异常坐标问题

---
 EdgeInspector_App/WebSocket/WebSocketClient.cpp |  646 +++++++++++++++++++++++++++++-----------------------------
 1 files changed, 323 insertions(+), 323 deletions(-)

diff --git a/EdgeInspector_App/WebSocket/WebSocketClient.cpp b/EdgeInspector_App/WebSocket/WebSocketClient.cpp
index e02dcc5..84ef4b0 100644
--- a/EdgeInspector_App/WebSocket/WebSocketClient.cpp
+++ b/EdgeInspector_App/WebSocket/WebSocketClient.cpp
@@ -1,326 +1,326 @@
 #include "stdafx.h"
 #include "WebSocketClient.h"
 
-WebSocketClient::WebSocketClient() : m_connected(false), m_reconnect(true), m_close_done(false), m_message_received(false), m_heartbeat_interval(5) {
-    // 清除之前的客户端配置并重新初始化
-    m_client.clear_access_channels(websocketpp::log::alevel::all);
-    m_client.clear_error_channels(websocketpp::log::elevel::all);
-    m_client.init_asio();
-
-    // 设置事件回调
-    m_client.set_open_handler([this](websocketpp::connection_hdl hdl) { on_open(hdl); });
-    m_client.set_message_handler([this](websocketpp::connection_hdl hdl, message_ptr msg) { on_message(hdl, msg); });
-    m_client.set_close_handler([this](websocketpp::connection_hdl hdl) { on_close(hdl); });
-    m_client.set_fail_handler([this](websocketpp::connection_hdl hdl) { on_fail(hdl); });
-	m_client.set_pong_handler([this](websocketpp::connection_hdl hdl, const std::string& payload) { on_pong(hdl, payload); });
-}
-
-WebSocketClient::~WebSocketClient() {
-    close();
-}
-
-void WebSocketClient::connect(const std::string& uri) {
-    websocketpp::lib::error_code ec;
-    {
-        m_connected.store(false);
-        m_reconnect.store(false);
-        m_client.clear_access_channels(websocketpp::log::alevel::all);
-        m_client.clear_error_channels(websocketpp::log::elevel::all);
-
-        std::lock_guard<std::mutex> lock(m_mutex);  // 保护共享资源
-        auto con = m_client.get_connection(uri, ec);
-
-        if (ec) {
-            std::cerr << "Get connection failed: " << ec.message() << std::endl;
-            return;
-        }
-
-        m_hdl = con->get_handle();
-        m_client.connect(con);
-    }
-
-    // 启动工作线程
-    m_thread = std::thread(&WebSocketClient::run, this);
-}
-
-bool WebSocketClient::is_busy() const {
-    return m_busy.load();
-}
-
-void WebSocketClient::set_busy(bool busy) {
-    m_busy.store(busy);
-}
-
-void WebSocketClient::send(const std::string& message) {
-    std::lock_guard<std::mutex> lock(m_mutex);
-    if (m_connected.load()) {
-        websocketpp::lib::error_code ec;
-        m_client.send(m_hdl, message, websocketpp::frame::opcode::text, ec);
-        if (ec) {
-            std::cerr << "Send failed: " << ec.message() << std::endl;
-        }
-    }
-    else {
-        std::cerr << "Not connected, cannot send message." << std::endl;
-    }
-}
-
-void WebSocketClient::send_binary(const std::vector<char>& binary_data) {
-    std::lock_guard<std::mutex> lock(m_mutex);
-    if (m_connected.load()) {
-        websocketpp::lib::error_code ec;
-        m_client.send(m_hdl, binary_data.data(), binary_data.size(), websocketpp::frame::opcode::binary, ec);
-        if (ec) {
-            std::cerr << "Send binary data failed: " << ec.message() << std::endl;
-        }
-    }
-    else {
-        std::cerr << "Not connected, cannot send binary data." << std::endl;
-    }
-}
-
-void WebSocketClient::enqueue_message(const std::string& message) {
-    m_message_queue.push(message);
-    process_next_message();
-}
-
-void WebSocketClient::enqueue_binary(const std::vector<char>& binary_data) {
-    m_binary_queue.push(binary_data);
-    process_next_binary();
-}
-
-void WebSocketClient::process_next_message() {
-    if (!m_message_queue.empty() && !is_busy()) {
-        set_busy(true);
-        std::string message = m_message_queue.front();
-        m_message_queue.pop();
-
-        send(message); // 发送消息
-
-        set_busy(false); // 设置为空闲状态,并处理下一个
-        process_next_message();
-    }
-}
-
-void WebSocketClient::process_next_binary() {
-    if (!m_binary_queue.empty() && !is_busy()) {
-        set_busy(true);
-        std::vector<char> binary_data = m_binary_queue.front();
-        m_binary_queue.pop();
-
-        send_binary(binary_data); // 发送二进制数据
-
-        set_busy(false); // 设置为空闲状态,并处理下一个
-        process_next_binary();
-    }
-}
-
-bool WebSocketClient::send_and_wait(const std::string& message, int timeout_ms) {
-    std::unique_lock<std::mutex> lock(m_mutex);
-    m_message_received = false;
-
-    if (m_connected.load()) {
-        // 发送消息
-        websocketpp::lib::error_code ec;
-        m_client.send(m_hdl, message, websocketpp::frame::opcode::text, ec);
-        if (ec) {
-            std::cerr << "Send failed: " << ec.message() << std::endl;
-            return false;
-        }
-
-        // 等待消息或超时
-        if (m_cv.wait_for(lock, std::chrono::milliseconds(timeout_ms), [this]() { return m_message_received; })) {
-            std::cout << "Server response received." << std::endl;
-            return true;
-        }
-        else {
-            std::cerr << "Timeout: No response from server." << std::endl;
-            return false;
-        }
-	}
-	else {
-		std::cerr << "Not connected, cannot send message." << std::endl;
-	}
-}
-
-bool WebSocketClient::send_binary_and_wait(const std::vector<char>& binary_data, int timeout_ms) {
-    std::unique_lock<std::mutex> lock(m_mutex);
-    m_message_received = false;
-
-    if (m_connected.load()) {
-        // 发送消息
-        websocketpp::lib::error_code ec;
-        m_client.send(m_hdl, binary_data.data(), binary_data.size(), websocketpp::frame::opcode::binary, ec);
-        if (ec) {
-            std::cerr << "Send failed: " << ec.message() << std::endl;
-            return false;
-        }
-
-        // 等待消息或超时
-        if (m_cv.wait_for(lock, std::chrono::milliseconds(timeout_ms), [this]() { return m_message_received; })) {
-            std::cout << "Server response received." << std::endl;
-            return true;
-        }
-        else {
-            std::cerr << "Timeout: No response from server." << std::endl;
-            return false;
-        }
-    }
-    else {
-        std::cerr << "Not connected, cannot send binary data." << std::endl;
-    }
-}
-
-void WebSocketClient::close() {
-    if (!m_connected.load()) {
-        return;
-    }
-
-    try {
-        m_reconnect.store(false);
-        m_client.close(m_hdl, websocketpp::close::status::normal, "Closing connection");
-    }
-    catch (const std::exception& e) {
-        std::cerr << "Error during close: " << e.what() << std::endl;
-    }
-
-    std::unique_lock<std::mutex> lock(m_mutex);
-    m_cv.wait(lock, [this] { return m_close_done; });
-    m_close_done = false;
-
-    m_client.stop();
-    if (m_thread.joinable()) {
-        m_thread.join();
-    }
-
-    m_client.reset();
-}
-
-void WebSocketClient::set_open_handler(OpenHandler handler) {
-    std::lock_guard<std::mutex> lock(m_mutex);
-    m_open_handler = handler;
-}
-
-void WebSocketClient::set_message_handler(MessageHandler handler) {
-    std::lock_guard<std::mutex> lock(m_mutex);
-    m_message_handler = handler;
-}
-
-void WebSocketClient::set_close_handler(CloseHandler handler) {
-    std::lock_guard<std::mutex> lock(m_mutex);
-    m_close_handler = handler;
-}
-
-void WebSocketClient::set_fail_handler(FailHandler handler) {
-    std::lock_guard<std::mutex> lock(m_mutex);
-    m_fail_handler = handler;
-}
-
-void WebSocketClient::set_pong_handler(PongHandler handler) {
-	std::lock_guard<std::mutex> lock(m_mutex);
-	m_pong_handler = handler;
-}
-
-void WebSocketClient::set_heartbeat_interval(int interval) {
-    std::lock_guard<std::mutex> lock(m_mutex);
-    m_heartbeat_interval = interval;
-}
-
-std::string WebSocketClient::get_current_url() {
-    std::lock_guard<std::mutex> lock(m_mutex);
-    auto con = m_client.get_con_from_hdl(m_hdl);
-    return con->get_uri()->str();
-}
-
-bool WebSocketClient::is_connected() const {
-    return m_connected.load();
-}
-
-void WebSocketClient::run() {
-    try {
-        m_client.run();
-    }
-    catch (const std::exception& e) {
-        std::cerr << "Error in run: " << e.what() << std::endl;
-    }
-
-    m_connected.store(false);
-}
-
-void WebSocketClient::heartbeat() {
-    while (m_reconnect.load()) {
-        std::this_thread::sleep_for(std::chrono::seconds(m_heartbeat_interval));
-        if (!m_connected.load()) {
-            std::cerr << "Attempting to reconnect..." << std::endl;
-            connect(get_current_url());
-        }
-    }
-}
-
-void WebSocketClient::on_open(websocketpp::connection_hdl hdl) {
-    std::cout << "Connection established" << std::endl;
-    std::lock_guard<std::mutex> lock(m_mutex);
-    m_connected.store(true);
-    m_reconnect.store(true);
-    if (m_open_handler) {
-        m_open_handler();
-    }
-}
-
-void WebSocketClient::on_message(connection_hdl hdl, message_ptr msg) {
-    std::cout << "Received message: " << msg->get_payload() << std::endl;
-    std::lock_guard<std::mutex> lock(m_mutex);
-    if (m_message_handler) {
-        m_message_handler(msg->get_payload());
-    }
-
-    m_message_received = true;
-    m_cv.notify_one();  // 唤醒等待线程
-}
-
-void WebSocketClient::on_close(connection_hdl hdl) {
-    std::cout << "Connection closed." << std::endl;
-    std::lock_guard<std::mutex> lock(m_mutex);
-
-    m_hdl.reset();  // 清空连接句柄
-    m_connected.store(false);
-    if (m_close_handler) {
-        m_close_handler();
-    }
-
-    // 如果需要重连
-    if (m_reconnect.load()) {
-
-        // 停止当前运行的事件循环
-        //m_client.stop();
-        //if (m_thread.joinable()) {
-        //    m_thread.join();
-        //}
-        std::cerr << "Connection lost. Attempting to reconnect..." << std::endl;
-        //reconnect();  // 启动重连机制
-    }
-    else {
-        m_cv.notify_one();
-        m_close_done = true;
-    }
-}
-
-void WebSocketClient::on_fail(websocketpp::connection_hdl hdl) {
-    std::cerr << "Connection failed" << std::endl;
-    std::lock_guard<std::mutex> lock(m_mutex);
-    m_connected.store(false);
-
-    if (m_fail_handler) {
-        m_fail_handler();
-    }
-}
-
-void WebSocketClient::on_pong(websocketpp::connection_hdl hdl, const std::string& payload) {
-    std::cout << "Received pong response with payload: " << payload << std::endl;
-    std::lock_guard<std::mutex> lock(m_mutex);
-    m_connected.store(true);
-
-    if (m_pong_handler) {
-        m_pong_handler(payload);
-    }
-}
\ No newline at end of file
+//WebSocketClient::WebSocketClient() : m_connected(false), m_reconnect(true), m_close_done(false), m_message_received(false), m_heartbeat_interval(5) {
+//    // 清除之前的客户端配置并重新初始化
+//    m_client.clear_access_channels(websocketpp::log::alevel::all);
+//    m_client.clear_error_channels(websocketpp::log::elevel::all);
+//    m_client.init_asio();
+//
+//    // 设置事件回调
+//    m_client.set_open_handler([this](websocketpp::connection_hdl hdl) { on_open(hdl); });
+//    m_client.set_message_handler([this](websocketpp::connection_hdl hdl, message_ptr msg) { on_message(hdl, msg); });
+//    m_client.set_close_handler([this](websocketpp::connection_hdl hdl) { on_close(hdl); });
+//    m_client.set_fail_handler([this](websocketpp::connection_hdl hdl) { on_fail(hdl); });
+//	m_client.set_pong_handler([this](websocketpp::connection_hdl hdl, const std::string& payload) { on_pong(hdl, payload); });
+//}
+//
+//WebSocketClient::~WebSocketClient() {
+//    close();
+//}
+//
+//void WebSocketClient::connect(const std::string& uri) {
+//    websocketpp::lib::error_code ec;
+//    {
+//        m_connected.store(false);
+//        m_reconnect.store(false);
+//        m_client.clear_access_channels(websocketpp::log::alevel::all);
+//        m_client.clear_error_channels(websocketpp::log::elevel::all);
+//
+//        std::lock_guard<std::mutex> lock(m_mutex);  // 保护共享资源
+//        auto con = m_client.get_connection(uri, ec);
+//
+//        if (ec) {
+//            std::cerr << "Get connection failed: " << ec.message() << std::endl;
+//            return;
+//        }
+//
+//        m_hdl = con->get_handle();
+//        m_client.connect(con);
+//    }
+//
+//    // 启动工作线程
+//    m_thread = std::thread(&WebSocketClient::run, this);
+//}
+//
+//bool WebSocketClient::is_busy() const {
+//    return m_busy.load();
+//}
+//
+//void WebSocketClient::set_busy(bool busy) {
+//    m_busy.store(busy);
+//}
+//
+//void WebSocketClient::send(const std::string& message) {
+//    std::lock_guard<std::mutex> lock(m_mutex);
+//    if (m_connected.load()) {
+//        websocketpp::lib::error_code ec;
+//        m_client.send(m_hdl, message, websocketpp::frame::opcode::text, ec);
+//        if (ec) {
+//            std::cerr << "Send failed: " << ec.message() << std::endl;
+//        }
+//    }
+//    else {
+//        std::cerr << "Not connected, cannot send message." << std::endl;
+//    }
+//}
+//
+//void WebSocketClient::send_binary(const std::vector<char>& binary_data) {
+//    std::lock_guard<std::mutex> lock(m_mutex);
+//    if (m_connected.load()) {
+//        websocketpp::lib::error_code ec;
+//        m_client.send(m_hdl, binary_data.data(), binary_data.size(), websocketpp::frame::opcode::binary, ec);
+//        if (ec) {
+//            std::cerr << "Send binary data failed: " << ec.message() << std::endl;
+//        }
+//    }
+//    else {
+//        std::cerr << "Not connected, cannot send binary data." << std::endl;
+//    }
+//}
+//
+//void WebSocketClient::enqueue_message(const std::string& message) {
+//    m_message_queue.push(message);
+//    process_next_message();
+//}
+//
+//void WebSocketClient::enqueue_binary(const std::vector<char>& binary_data) {
+//    m_binary_queue.push(binary_data);
+//    process_next_binary();
+//}
+//
+//void WebSocketClient::process_next_message() {
+//    if (!m_message_queue.empty() && !is_busy()) {
+//        set_busy(true);
+//        std::string message = m_message_queue.front();
+//        m_message_queue.pop();
+//
+//        send(message); // 发送消息
+//
+//        set_busy(false); // 设置为空闲状态,并处理下一个
+//        process_next_message();
+//    }
+//}
+//
+//void WebSocketClient::process_next_binary() {
+//    if (!m_binary_queue.empty() && !is_busy()) {
+//        set_busy(true);
+//        std::vector<char> binary_data = m_binary_queue.front();
+//        m_binary_queue.pop();
+//
+//        send_binary(binary_data); // 发送二进制数据
+//
+//        set_busy(false); // 设置为空闲状态,并处理下一个
+//        process_next_binary();
+//    }
+//}
+//
+//bool WebSocketClient::send_and_wait(const std::string& message, int timeout_ms) {
+//    std::unique_lock<std::mutex> lock(m_mutex);
+//    m_message_received = false;
+//
+//    if (m_connected.load()) {
+//        // 发送消息
+//        websocketpp::lib::error_code ec;
+//        m_client.send(m_hdl, message, websocketpp::frame::opcode::text, ec);
+//        if (ec) {
+//            std::cerr << "Send failed: " << ec.message() << std::endl;
+//            return false;
+//        }
+//
+//        // 等待消息或超时
+//        if (m_cv.wait_for(lock, std::chrono::milliseconds(timeout_ms), [this]() { return m_message_received; })) {
+//            std::cout << "Server response received." << std::endl;
+//            return true;
+//        }
+//        else {
+//            std::cerr << "Timeout: No response from server." << std::endl;
+//            return false;
+//        }
+//	}
+//	else {
+//		std::cerr << "Not connected, cannot send message." << std::endl;
+//	}
+//}
+//
+//bool WebSocketClient::send_binary_and_wait(const std::vector<char>& binary_data, int timeout_ms) {
+//    std::unique_lock<std::mutex> lock(m_mutex);
+//    m_message_received = false;
+//
+//    if (m_connected.load()) {
+//        // 发送消息
+//        websocketpp::lib::error_code ec;
+//        m_client.send(m_hdl, binary_data.data(), binary_data.size(), websocketpp::frame::opcode::binary, ec);
+//        if (ec) {
+//            std::cerr << "Send failed: " << ec.message() << std::endl;
+//            return false;
+//        }
+//
+//        // 等待消息或超时
+//        if (m_cv.wait_for(lock, std::chrono::milliseconds(timeout_ms), [this]() { return m_message_received; })) {
+//            std::cout << "Server response received." << std::endl;
+//            return true;
+//        }
+//        else {
+//            std::cerr << "Timeout: No response from server." << std::endl;
+//            return false;
+//        }
+//    }
+//    else {
+//        std::cerr << "Not connected, cannot send binary data." << std::endl;
+//    }
+//}
+//
+//void WebSocketClient::close() {
+//    if (!m_connected.load()) {
+//        return;
+//    }
+//
+//    try {
+//        m_reconnect.store(false);
+//        m_client.close(m_hdl, websocketpp::close::status::normal, "Closing connection");
+//    }
+//    catch (const std::exception& e) {
+//        std::cerr << "Error during close: " << e.what() << std::endl;
+//    }
+//
+//    std::unique_lock<std::mutex> lock(m_mutex);
+//    m_cv.wait(lock, [this] { return m_close_done; });
+//    m_close_done = false;
+//
+//    m_client.stop();
+//    if (m_thread.joinable()) {
+//        m_thread.join();
+//    }
+//
+//    m_client.reset();
+//}
+//
+//void WebSocketClient::set_open_handler(OpenHandler handler) {
+//    std::lock_guard<std::mutex> lock(m_mutex);
+//    m_open_handler = handler;
+//}
+//
+//void WebSocketClient::set_message_handler(MessageHandler handler) {
+//    std::lock_guard<std::mutex> lock(m_mutex);
+//    m_message_handler = handler;
+//}
+//
+//void WebSocketClient::set_close_handler(CloseHandler handler) {
+//    std::lock_guard<std::mutex> lock(m_mutex);
+//    m_close_handler = handler;
+//}
+//
+//void WebSocketClient::set_fail_handler(FailHandler handler) {
+//    std::lock_guard<std::mutex> lock(m_mutex);
+//    m_fail_handler = handler;
+//}
+//
+//void WebSocketClient::set_pong_handler(PongHandler handler) {
+//	std::lock_guard<std::mutex> lock(m_mutex);
+//	m_pong_handler = handler;
+//}
+//
+//void WebSocketClient::set_heartbeat_interval(int interval) {
+//    std::lock_guard<std::mutex> lock(m_mutex);
+//    m_heartbeat_interval = interval;
+//}
+//
+//std::string WebSocketClient::get_current_url() {
+//    std::lock_guard<std::mutex> lock(m_mutex);
+//    auto con = m_client.get_con_from_hdl(m_hdl);
+//    return con->get_uri()->str();
+//}
+//
+//bool WebSocketClient::is_connected() const {
+//    return m_connected.load();
+//}
+//
+//void WebSocketClient::run() {
+//    try {
+//        m_client.run();
+//    }
+//    catch (const std::exception& e) {
+//        std::cerr << "Error in run: " << e.what() << std::endl;
+//    }
+//
+//    m_connected.store(false);
+//}
+//
+//void WebSocketClient::heartbeat() {
+//    while (m_reconnect.load()) {
+//        std::this_thread::sleep_for(std::chrono::seconds(m_heartbeat_interval));
+//        if (!m_connected.load()) {
+//            std::cerr << "Attempting to reconnect..." << std::endl;
+//            connect(get_current_url());
+//        }
+//    }
+//}
+//
+//void WebSocketClient::on_open(websocketpp::connection_hdl hdl) {
+//    std::cout << "Connection established" << std::endl;
+//    std::lock_guard<std::mutex> lock(m_mutex);
+//    m_connected.store(true);
+//    m_reconnect.store(true);
+//    if (m_open_handler) {
+//        m_open_handler();
+//    }
+//}
+//
+//void WebSocketClient::on_message(connection_hdl hdl, message_ptr msg) {
+//    std::cout << "Received message: " << msg->get_payload() << std::endl;
+//    std::lock_guard<std::mutex> lock(m_mutex);
+//    if (m_message_handler) {
+//        m_message_handler(msg->get_payload());
+//    }
+//
+//    m_message_received = true;
+//    m_cv.notify_one();  // 唤醒等待线程
+//}
+//
+//void WebSocketClient::on_close(connection_hdl hdl) {
+//    std::cout << "Connection closed." << std::endl;
+//    std::lock_guard<std::mutex> lock(m_mutex);
+//
+//    m_hdl.reset();  // 清空连接句柄
+//    m_connected.store(false);
+//    if (m_close_handler) {
+//        m_close_handler();
+//    }
+//
+//    // 如果需要重连
+//    if (m_reconnect.load()) {
+//
+//        // 停止当前运行的事件循环
+//        //m_client.stop();
+//        //if (m_thread.joinable()) {
+//        //    m_thread.join();
+//        //}
+//        std::cerr << "Connection lost. Attempting to reconnect..." << std::endl;
+//        //reconnect();  // 启动重连机制
+//    }
+//    else {
+//        m_cv.notify_one();
+//        m_close_done = true;
+//    }
+//}
+//
+//void WebSocketClient::on_fail(websocketpp::connection_hdl hdl) {
+//    std::cerr << "Connection failed" << std::endl;
+//    std::lock_guard<std::mutex> lock(m_mutex);
+//    m_connected.store(false);
+//
+//    if (m_fail_handler) {
+//        m_fail_handler();
+//    }
+//}
+//
+//void WebSocketClient::on_pong(websocketpp::connection_hdl hdl, const std::string& payload) {
+//    std::cout << "Received pong response with payload: " << payload << std::endl;
+//    std::lock_guard<std::mutex> lock(m_mutex);
+//    m_connected.store(true);
+//
+//    if (m_pong_handler) {
+//        m_pong_handler(payload);
+//    }
+//}
\ No newline at end of file

--
Gitblit v1.9.3