From bfb52281e8c63837f320d005ff4f99b92bf947e9 Mon Sep 17 00:00:00 2001 From: zcy <290198252@qq.com> Date: Thu, 30 Dec 2021 16:56:16 +0800 Subject: [PATCH] no message --- examples/proto_debuger/base_form.cpp | 31 ++++++++-------- examples/proto_debuger/base_form.h | 2 ++ examples/proto_debuger/msgdef.h | 4 +-- examples/proto_debuger/new_monitor_form.cpp | 1 + examples/proto_debuger/proto_debuger.vcxproj | 3 ++ .../proto_debuger.vcxproj.filters | 9 +++++ examples/proto_debuger/tcp_client.cpp | 30 ++++++++-------- examples/proto_debuger/tcp_client_form.h | 2 -- .../proto_debuger/tcp_server_libevent.cpp | 16 +++++++-- examples/proto_debuger/tcp_server_libevent.h | 3 ++ .../themes/default/basic/tcp_server_form.xml | 36 +++++++++++++++++++ 11 files changed, 99 insertions(+), 38 deletions(-) create mode 100644 examples/x64/Debug/resources/themes/default/basic/tcp_server_form.xml diff --git a/examples/proto_debuger/base_form.cpp b/examples/proto_debuger/base_form.cpp index 286f81ec..5612765f 100644 --- a/examples/proto_debuger/base_form.cpp +++ b/examples/proto_debuger/base_form.cpp @@ -30,7 +30,7 @@ std::wstring BasicForm::GetWindowClassName() const { return kClassName; } - +int gTcpServerCnt = 0; int gTcpClientCnt = 0; LRESULT BasicForm::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) { @@ -122,38 +122,37 @@ LRESULT BasicForm::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) if (uMsg == WM_ADD_TCPSERVER_MONITOR) { TcpServerInfo* info = (TcpServerInfo*)wParam; - TcpServerLibevent* cli = (TcpServerLibevent*)lParam; + TcpServerLibevent* server = (TcpServerLibevent*)lParam; ui::TreeNode* node = new ui::TreeNode; - auto key = info->ip + L":" + std::to_wstring(gTcpClientCnt); + auto key = info->ip + L":" + std::to_wstring(gTcpServerCnt); node->SetText(key); node->SetClass(L"listitem"); node->SetFixedHeight(20); node->SetMargin({ 20, 0, 0, 0 }); - mMonitor->GetRootNode()->GetChildNode(1)->AddChildNode(node); - gTcpClientCnt++; + mMonitor->GetRootNode()->GetChildNode(2)->AddChildNode(node); + gTcpServerCnt++; printf("WM_ADD_TCPSERVER_MONITOR\r\n"); - if (mTcpClientForm.find(info->ip + L":" - + std::to_wstring(gTcpClientCnt)) == mTcpClientForm.end()) + if (mTcpServerForm.find(info->ip + L":" + + std::to_wstring(gTcpServerCnt)) == mTcpServerForm.end()) { - /* - auto form = new TcpClientForm(this, wstring2string(info->ip), info->port, cli); - form->SetChildLayoutXML(L"basic/tcp_form.xml"); + auto form = new TcpServerFrom(this, wstring2string(info->ip), info->port, server); + form->SetChildLayoutXML(L"basic/tcp_server_form.xml"); form->SetName(key); form->SetVisible(false); - mTcpClientForm[key] = form; + mTcpServerForm[key] = form; if (!mRightSide->Add(form)) - printf("erroer 1"); - */ + 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()); - TcpClientForm* p = mTcpClientForm[dynamic_cast (ev->pSender)->GetText()]; + TcpServerFrom* p = mTcpServerForm[dynamic_cast (ev->pSender)->GetText()]; if (p != nullptr) { printf("GetCurSel %d\r\n", mRightSide->GetCurSel()); @@ -177,7 +176,7 @@ LRESULT BasicForm::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) } ); - */ + } diff --git a/examples/proto_debuger/base_form.h b/examples/proto_debuger/base_form.h index 4142260f..b75b04a9 100644 --- a/examples/proto_debuger/base_form.h +++ b/examples/proto_debuger/base_form.h @@ -17,6 +17,7 @@ #include "new_monitor_form.h" #include "uart_process.h" #include "tcp_client_form.h" +#include "tcp_server_form.h" #include #include @@ -55,6 +56,7 @@ private: ui::TreeView *mMonitor; std::map mUartForm; std::map mTcpClientForm; + std::map mTcpServerForm; ui::Control* mRightShow; }; diff --git a/examples/proto_debuger/msgdef.h b/examples/proto_debuger/msgdef.h index 7a4ad662..72905872 100644 --- a/examples/proto_debuger/msgdef.h +++ b/examples/proto_debuger/msgdef.h @@ -3,7 +3,7 @@ #define WM_USER_POS_CHANGED (WM_USER + 2) #define WM_ADD_UART_MONITOR (WM_USER + 3) #define WM_ADD_TCPCLIENT_MONITOR (WM_USER + 4) -#define WM_ADD_TCPSERVER_MONITOR (WM_USER + 4) #define WM_ADD_UART_RECVDATA (WM_USER + 5) -#define WM_ADD_UART_CLOSE (WM_USER + 6) \ No newline at end of file +#define WM_ADD_UART_CLOSE (WM_USER + 6) +#define WM_ADD_TCPSERVER_MONITOR (WM_USER + 7) diff --git a/examples/proto_debuger/new_monitor_form.cpp b/examples/proto_debuger/new_monitor_form.cpp index 4bdc71a2..b75109b7 100644 --- a/examples/proto_debuger/new_monitor_form.cpp +++ b/examples/proto_debuger/new_monitor_form.cpp @@ -161,6 +161,7 @@ void NewMonitorForm::InitWindow() wprintf(L"%s\r\n", m_port_select->GetText().c_str()); int port = atoi(wstring2string(m_port_select->GetText()).c_str()); m_tcp_server = new TcpServerLibevent(port, wstring2string(m_ip_select->GetText().c_str())); + m_tcp_server->StartServerAsync(); TcpServerInfo* p = new TcpServerInfo; p->ip = m_ip_select->GetText(); p->port = port; diff --git a/examples/proto_debuger/proto_debuger.vcxproj b/examples/proto_debuger/proto_debuger.vcxproj index 5b0f96c9..25fc7f21 100644 --- a/examples/proto_debuger/proto_debuger.vcxproj +++ b/examples/proto_debuger/proto_debuger.vcxproj @@ -168,6 +168,7 @@ + @@ -182,6 +183,7 @@ + @@ -192,6 +194,7 @@ + diff --git a/examples/proto_debuger/proto_debuger.vcxproj.filters b/examples/proto_debuger/proto_debuger.vcxproj.filters index 66933793..93631579 100644 --- a/examples/proto_debuger/proto_debuger.vcxproj.filters +++ b/examples/proto_debuger/proto_debuger.vcxproj.filters @@ -48,6 +48,9 @@ 源文件 + + 源文件 + @@ -80,6 +83,9 @@ 头文件 + + 头文件 + @@ -97,6 +103,9 @@ 资源文件 + + 资源文件 + diff --git a/examples/proto_debuger/tcp_client.cpp b/examples/proto_debuger/tcp_client.cpp index 3884fb74..4acc9e2f 100644 --- a/examples/proto_debuger/tcp_client.cpp +++ b/examples/proto_debuger/tcp_client.cpp @@ -109,31 +109,31 @@ TcpClientLibevent::TcpClientLibevent(std::string addrinfo, int port, TcpClientLi mStatus(UNCONNECTED), mObserver(nullptr) { - memset(&mSrv, 0, sizeof(mSrv)); + memset(&mSrv, 0, sizeof(mSrv)); #ifdef linux mSrv.sin_addr.s_addr = inet_addr(addrinfo.c_str()); mSrv.sin_family = AF_INET; #endif #ifdef _WIN32 - mSrv.sin_addr.S_un.S_addr = inet_addr(addrinfo.c_str()); - mSrv.sin_family = AF_INET; + mSrv.sin_addr.S_un.S_addr = inet_addr(addrinfo.c_str()); + mSrv.sin_family = AF_INET; #endif - mSrv.sin_port = htons(port); - mBase = event_base_new(); - if (!mBase) - { - printf("Could not initialize libevent\n"); - } + mSrv.sin_port = htons(port); + mBase = event_base_new(); + if (!mBase) + { + printf("Could not initialize libevent\n"); + } #ifdef WIN32 - evthread_use_windows_threads(); + evthread_use_windows_threads(); #else - evthread_use_pthreads(); + evthread_use_pthreads(); #endif - this->mThread = new thread(ThreadRun,this); - this->mObserver = p; - mByteRecv = 0; - mByteSend = 0; + this->mThread = new thread(ThreadRun, this); + this->mObserver = p; + mByteRecv = 0; + mByteSend = 0; } diff --git a/examples/proto_debuger/tcp_client_form.h b/examples/proto_debuger/tcp_client_form.h index cb5ffc2f..1f790787 100644 --- a/examples/proto_debuger/tcp_client_form.h +++ b/examples/proto_debuger/tcp_client_form.h @@ -31,8 +31,6 @@ protected: virtual void OnData(uint8_t* dat, uint64_t len) ; virtual void OnClose(); - - private: ui::Label* m_label_1; ui::RichEdit* m_rich_edit_1; diff --git a/examples/proto_debuger/tcp_server_libevent.cpp b/examples/proto_debuger/tcp_server_libevent.cpp index a861fff9..2256724a 100644 --- a/examples/proto_debuger/tcp_server_libevent.cpp +++ b/examples/proto_debuger/tcp_server_libevent.cpp @@ -127,7 +127,8 @@ void event_cb(struct bufferevent* bev, short events, void* arg) bufferevent_free(bev); server->RemoveConnection(conn->SocketFd()); } - delete conn; + + //delete conn; } void ServerCallbacks::cb_listener(struct evconnlistener* listener, evutil_socket_t fd, struct sockaddr* addr, int len, void* ptr) @@ -198,8 +199,10 @@ void ServerCallbacks::server_run(TcpServerLibevent* p) { if (nullptr != p) { if (p->m_status == TcpServerLibevent::STOP) { p->m_status = TcpServerLibevent::RUNNING; + event_base_dispatch(p->m_event_base); - evconnlistener_free(p->m_event_listener); + if(!p->m_event_listener) + evconnlistener_free(p->m_event_listener); event_base_free(p->m_event_base); } } @@ -275,6 +278,7 @@ TcpServerLibevent::TcpServerLibevent(int port, string bindip) : m_backlog, (struct sockaddr*)&m_server_addr, sizeof(m_server_addr)); + if (NULL == m_event_listener) { m_status = FAIL; @@ -323,4 +327,10 @@ TcpServerLibevent::~TcpServerLibevent() { event_base_loopbreak(m_event_base); this->m_status = STOP; } -} \ No newline at end of file +} + + +uint64_t TcpServerLibevent::SocketFd() +{ + return mSocketFD; +} diff --git a/examples/proto_debuger/tcp_server_libevent.h b/examples/proto_debuger/tcp_server_libevent.h index a412e8cc..8b51228b 100644 --- a/examples/proto_debuger/tcp_server_libevent.h +++ b/examples/proto_debuger/tcp_server_libevent.h @@ -70,6 +70,7 @@ public: int RemoveConnection(uint32_t); int SetNewConnectionHandle(OnAccept); int AddConnection(uint32_t fd, ConnectionLibevent* p); + uint64_t SocketFd(); friend struct ServerCallbacks; private: uint32_t m_port; // 监听端口号 @@ -83,6 +84,8 @@ private: thread* m_thread; map m_map_client; OnAccept m_handle_accept; + intptr_t mSocketFD; // 操作系统原生socket + }; #endif \ No newline at end of file diff --git a/examples/x64/Debug/resources/themes/default/basic/tcp_server_form.xml b/examples/x64/Debug/resources/themes/default/basic/tcp_server_form.xml new file mode 100644 index 00000000..6e60ef3d --- /dev/null +++ b/examples/x64/Debug/resources/themes/default/basic/tcp_server_form.xml @@ -0,0 +1,36 @@ + + + + +