pPowerMangerHost:WebSocket 连接时推送初始快照,更新前端页面
WebServer 增加 setOnOpen 回调,新客户端连接时立即推送当前状态快照; web/index.html 同步更新前端展示逻辑。
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
+860
-393
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user