From 1572832de677f61321adce74feeeea12d7f47b2b Mon Sep 17 00:00:00 2001
From: zcy <290198252@qq.com>
Date: Sun, 13 Mar 2022 01:50:44 +0800
Subject: [PATCH] add websocket server
---
.../themes/default/basic/newmonitor.xml | 2 +-
examples/proto_debuger/base_form.cpp | 79 ++++++++++++++++++-
examples/proto_debuger/base_form.h | 2 +
examples/proto_debuger/main.cpp | 3 +-
examples/proto_debuger/new_monitor_form.cpp | 34 +++++++-
examples/proto_debuger/proto_debuger.vcxproj | 2 +
.../proto_debuger.vcxproj.filters | 9 +++
examples/proto_debuger/udp_group_form.cpp | 7 +-
examples/proto_debuger/udp_group_form.h | 5 +-
examples/proto_debuger/websocket_client.cpp | 27 +++++--
examples/proto_debuger/websocket_client.h | 1 +
.../proto_debuger/websocket_client_form.cpp | 60 ++++++++++++--
.../proto_debuger/websocket_client_form.h | 10 ++-
examples/proto_debuger/websocket_server.h | 9 ---
14 files changed, 212 insertions(+), 38 deletions(-)
diff --git a/examples/Debug/resources/themes/default/basic/newmonitor.xml b/examples/Debug/resources/themes/default/basic/newmonitor.xml
index 26d749bb..550f788b 100644
--- a/examples/Debug/resources/themes/default/basic/newmonitor.xml
+++ b/examples/Debug/resources/themes/default/basic/newmonitor.xml
@@ -29,7 +29,7 @@
-
+
diff --git a/examples/proto_debuger/base_form.cpp b/examples/proto_debuger/base_form.cpp
index ce59be46..d7e4a461 100644
--- a/examples/proto_debuger/base_form.cpp
+++ b/examples/proto_debuger/base_form.cpp
@@ -112,6 +112,26 @@ LRESULT BasicForm::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
delete mRightShow;
mRightShow = nullptr;
}
+ if (uMsg == WM_ADD_WEBSOCKET_CLIENT_CLOSE) {
+ wprintf(L"close %s\r\n", ((wstring*)wParam)->c_str());
+ mRightShow->SetVisible(false);
+ mRightSide->SetAutoDestroy(true);
+ mRightSide->RemoveAll();
+
+ mWebsocketClientForm.erase(*(wstring*)(wParam));
+ int cnt = mMonitor->GetRootNode()->GetChildNode(5)->GetChildNodeCount();
+ ui::TreeNode* p = nullptr;
+ for (int i = 0; i < cnt; i++) {
+ if (mMonitor->GetRootNode()->GetChildNode(5)->GetChildNode(i)->GetText()
+ == *(wstring*)(wParam)) {
+ p = mMonitor->GetRootNode()->GetChildNode(5)->GetChildNode(i);
+ break;
+ }
+ }
+ mMonitor->GetRootNode()->GetChildNode(5)->RemoveChildNode(p);
+ // delete mRightShow;
+ mRightShow = nullptr;
+ }
if (uMsg == WM_USER_TCP_CLIENT_CLOSE) {
wprintf(L"close %s\r\n", ((wstring*)wParam)->c_str());
mRightShow->SetVisible(false);
@@ -221,7 +241,7 @@ LRESULT BasicForm::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
client->SetOnReadHandler(std::bind(&WebsocketClientForm::OnReadHandler,
form, std::placeholders::_1, std::placeholders::_2));
- form->SetChildLayoutXML(L"basic/tcp_server_form.xml");
+ form->SetChildLayoutXML(L"basic/websocket_client_form.xml");
form->SetName(key);
form->SetVisible(false);
mWebsocketClientForm[key] = form;
@@ -256,6 +276,57 @@ LRESULT BasicForm::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
}
);
}
+
+ if (uMsg == WM_ADD_WEBSOCKET_SERVER) {
+ TcpServerInfo* info = (TcpServerInfo*)wParam;
+ ui::TreeNode* node = new ui::TreeNode;
+
+ mMonitor->GetRootNode()->GetChildNode(5)->AddChildNode(node);
+ auto key = info->ip;
+ node->SetText(key);
+ node->SetClass(L"listitem");
+
+ if (mWebsocketServerForm.find(info->ip) == mWebsocketServerForm.end())
+ {
+ WebsocketServer* server = (WebsocketServer*)lParam;
+ auto form = new WebsocketServerForm(this, wstring2string(info->ip), server);
+
+ form->SetChildLayoutXML(L"basic/tcp_server_form.xml");
+ form->SetName(key);
+ form->SetVisible(false);
+ mWebsocketServerForm[key] = form;
+ if (!mRightSide->Add(form))
+ printf("error 1");
+ }
+ node->AttachAllEvents(
+ [this](ui::EventArgs* ev) {
+ if (ui::EventType::kEventSelect == ev->Type) {
+ wprintf(L"%s\r\n", dynamic_cast (ev->pSender)->GetText().c_str());
+ printf("GetCurSel %d\r\n", mRightSide->GetCurSel());
+ }
+ WebsocketServerForm* p = mWebsocketServerForm[dynamic_cast
+ (ev->pSender)->GetText()];
+ if (p != nullptr) {
+ printf("GetCurSel %d\r\n", mRightSide->GetCurSel());
+ p->SetAutoDestroy(true);
+ if (mRightShow != nullptr) {
+ mRightShow->SetVisible(false);
+ p->SetVisible(true);
+ mRightShow = p;
+ wprintf(L"%s", p->GetName());
+ mRightSide->SelectItem(p->GetName());
+ }
+ else {
+ wprintf(L"%s", p->GetName());
+ p->SetVisible(true);
+ mRightSide->SelectItem(p->GetName());
+ mRightShow = p;
+ }
+ }
+ return true;
+ }
+ );
+ }
if (uMsg == WM_ADD_TCPSERVER_MONITOR) {
TcpServerInfo* info = (TcpServerInfo*)wParam;
TcpServerLibevent* server = (TcpServerLibevent*)lParam;
@@ -485,6 +556,7 @@ void BasicForm::InitWindow(){
return true;
});
}
+
mMonitor = dynamic_cast(FindControl(L"tree"));
mMonitor->SetClass(L"list");
mMonitor->SetIndent(5);
@@ -573,6 +645,11 @@ LuaBindInterface* BasicForm::FindCurrentFormByLuaPointer(lua_State* pointer)
return (LuaBindInterface*)itr->second;
}
}
+ for (auto itr = mWebsocketClientForm.begin(); itr != mWebsocketClientForm.end(); itr++) {
+ if (itr->second->LuaVM()->VM() == pointer) {
+ return (LuaBindInterface*)itr->second;
+ }
+ }
return nullptr;
}
diff --git a/examples/proto_debuger/base_form.h b/examples/proto_debuger/base_form.h
index 2d102333..b3aca7a0 100644
--- a/examples/proto_debuger/base_form.h
+++ b/examples/proto_debuger/base_form.h
@@ -21,6 +21,7 @@
#include "udp_group_form.h"
#include "websocket_client_form.h"
#include "websocket_client.h"
+#include "websocket_server_form.h"
#include
#include