pPowerMangerHost:WebSocket 连接时推送初始快照,更新前端页面

WebServer 增加 setOnOpen 回调,新客户端连接时立即推送当前状态快照;
web/index.html 同步更新前端展示逻辑。
This commit is contained in:
zjk
2026-08-19 14:33:01 +08:00
parent 48be5115c9
commit 3cdfa2e757
4 changed files with 877 additions and 393 deletions
+3
View File
@@ -111,6 +111,9 @@ bool HostSim::OnStartUp()
m_webServer->setOnMessage([this](const string& msg) {
this->handleWebMessage(msg);
});
m_webServer->setOnOpen([this]() {
return this->buildSnapshot();
});
m_webServer->start(m_webPort);
RegisterVariables();
+10
View File
@@ -36,6 +36,12 @@ void WebServer::handleEvent(struct mg_connection* c, int ev, void* ev_data) {
} else if (ev == MG_EV_WS_OPEN) {
std::lock_guard<std::mutex> lock(m_wsMutex);
m_wsConnections.push_back(c);
if (m_onOpen) {
std::string welcome = m_onOpen();
if (!welcome.empty()) {
mg_ws_send(c, welcome.c_str(), welcome.size(), WEBSOCKET_OP_TEXT);
}
}
} else if (ev == MG_EV_CLOSE || ev == MG_EV_ERROR) {
std::lock_guard<std::mutex> lock(m_wsMutex);
for (auto it = m_wsConnections.begin(); it != m_wsConnections.end(); ++it) {
@@ -66,6 +72,10 @@ void WebServer::setOnMessage(std::function<void(const std::string&)> handler) {
m_onMessage = handler;
}
void WebServer::setOnOpen(std::function<std::string()> handler) {
m_onOpen = handler;
}
bool WebServer::start(int port) {
if (m_running) return true;
m_port = port;
+4
View File
@@ -24,6 +24,9 @@ public:
// 收到网页 WS 消息时的回调
void setOnMessage(std::function<void(const std::string&)> handler);
// 新 WebSocket 客户端连接时回调,返回需要立即推送给该客户端的初始文本(如快照)
void setOnOpen(std::function<std::string()> handler);
private:
static bool serverThreadCB(void* pParam);
bool serverThreadFunc();
@@ -37,6 +40,7 @@ private:
std::mutex m_wsMutex;
std::vector<mg_connection*> m_wsConnections;
std::function<void(const std::string&)> m_onMessage;
std::function<std::string()> m_onOpen;
};
#endif // WEBSERVER_H
File diff suppressed because it is too large Load Diff