From 2603a06533f317fc29c61c3e90d9af01dd8f1fbe Mon Sep 17 00:00:00 2001 From: zcy <290198252@qq.com> Date: Mon, 31 Jan 2022 01:00:02 +0800 Subject: [PATCH] no message --- examples/proto_debuger/lua_wraper.h | 2 - examples/proto_debuger/tcp_client.cpp | 8 +-- examples/proto_debuger/tcp_client.lua | 16 +++++ examples/proto_debuger/tcp_client_form.cpp | 25 ++++++- examples/proto_debuger/tcp_client_form.h | 6 +- examples/proto_debuger/tcp_server.lua | 16 +++++ examples/proto_debuger/tcp_server_form.cpp | 65 +++++++++++++++++-- examples/proto_debuger/tcp_server_form.h | 4 +- .../themes/default/basic/tcp_server_form.xml | 2 + 9 files changed, 124 insertions(+), 20 deletions(-) create mode 100644 examples/proto_debuger/tcp_client.lua create mode 100644 examples/proto_debuger/tcp_server.lua diff --git a/examples/proto_debuger/lua_wraper.h b/examples/proto_debuger/lua_wraper.h index cf9374f8..a04d73e3 100644 --- a/examples/proto_debuger/lua_wraper.h +++ b/examples/proto_debuger/lua_wraper.h @@ -123,7 +123,5 @@ private: std::map mFunc; }; - - #endif diff --git a/examples/proto_debuger/tcp_client.cpp b/examples/proto_debuger/tcp_client.cpp index 09c92fc8..2bd7d416 100644 --- a/examples/proto_debuger/tcp_client.cpp +++ b/examples/proto_debuger/tcp_client.cpp @@ -39,8 +39,9 @@ int ThreadRun(TcpClientLibevent *p) { #else //todo linux鐗堟湰sleep #endif + }else { + ret = p->Dispatch(); } - ret = p->Dispatch(); } } return 0; @@ -53,9 +54,10 @@ void conn_readcb(struct bufferevent *bev, void *user_data) size_t sz = evbuffer_get_length(input); if (sz > 0) { - uint8_t *msg = new uint8_t[sz]; + uint8_t *msg = new uint8_t[sz + 1]; int ret = bufferevent_read(bev, msg, sz); printf("%s\n", msg); + msg[sz] = '\0'; if(server->mObserver != nullptr){ server->mObserver->OnData(msg, ret); } @@ -134,7 +136,6 @@ TcpClientLibevent::TcpClientLibevent(std::string addrinfo, int port, TcpClientLi this->mObserver = p; mByteRecv = 0; mByteSend = 0; - } int TcpClientLibevent::ConnectServer() { @@ -219,7 +220,6 @@ int TcpClientLibevent::Close() { int TcpClientLibevent::SendDataAsync(const char* data, int len) { return bufferevent_write(this->mBev, data, len); - return 0; } uint64_t TcpClientLibevent::SocketFd() diff --git a/examples/proto_debuger/tcp_client.lua b/examples/proto_debuger/tcp_client.lua new file mode 100644 index 00000000..dae452fd --- /dev/null +++ b/examples/proto_debuger/tcp_client.lua @@ -0,0 +1,16 @@ +require("string") +local file = io.open("writetest.txt", "w+") + +function OnNewClient(ip,port) + showdata("on new client from lua " .. ip..port) +end + +function OnClientRecvData(data,ip,port) + showdata("client recieve data from lua "..data.. ip..port) +end + + +function OnClientDisconnect(ip,port) + showdata("client leave from lua " .. ip..port) +end + diff --git a/examples/proto_debuger/tcp_client_form.cpp b/examples/proto_debuger/tcp_client_form.cpp index af068ae8..495d4a0a 100644 --- a/examples/proto_debuger/tcp_client_form.cpp +++ b/examples/proto_debuger/tcp_client_form.cpp @@ -10,6 +10,21 @@ TcpClientForm::TcpClientForm(ui::Window* hwnd,std::string url, uint32_t port, Tc if (nullptr != hwnd) { this->SetWindow(hwnd, nullptr, false); } + + mLua = new LuaDelegate; + mLuaFile.open("tcp_server.lua"); + std::string lua_script; + if (mLuaFile.is_open()) { + std::string s; + while (getline(mLuaFile, s)) { + lua_script += s + "\r\n"; + } + mLuaFile.close(); + } + mLuaScript = lua_script; + mLua->DoString(lua_script); + + std::cout << "lua script is " << lua_script << std::endl; m_url = url; m_port = port; mLua = new LuaDelegate(); @@ -36,6 +51,10 @@ void TcpClientForm::Init() m_check_box_3 = dynamic_cast(FindSubControl(L"check_hex_send")); m_check_box_4 = dynamic_cast(FindSubControl(L"check_hex_recv")); + m_rich_edit_2->SetRich(true); + m_rich_edit_2->SetReturnMsgWantCtrl(true); + m_rich_edit_2->SetText(string2wstring(mLuaScript)); + wchar_t p[100] = { 0 }; wsprintf(p, L"地址%s,端口号%d 未连接", string2wstring(m_url).c_str(),m_port); @@ -82,14 +101,14 @@ void TcpClientForm::OnDisConnected(std::string reason) void TcpClientForm::OnData(uint8_t* dat, uint64_t len) { - std::cout << (char*)dat << std::endl; - m_rich_edit_1->AppendText(string2wstring((char*)dat), false); + //std::cout << (char*)dat << "len is " << len << std::endl; + //m_rich_edit_1->AppendText(string2wstring(std::string((char*)dat)), false); + } void TcpClientForm::OnClose() { m_rich_edit_1->AppendText(string2wstring("连接已经断开\r\n"), false); - } diff --git a/examples/proto_debuger/tcp_client_form.h b/examples/proto_debuger/tcp_client_form.h index b940383c..a1c0e960 100644 --- a/examples/proto_debuger/tcp_client_form.h +++ b/examples/proto_debuger/tcp_client_form.h @@ -18,6 +18,8 @@ #include "lua_wraper.h" #include "global.h" +#include +#include using namespace std; class TcpClientForm : @@ -49,9 +51,9 @@ private: ui::CheckBox* m_check_box_3; ui::CheckBox* m_check_box_4; TcpClientLibevent* mClient; - + std::ifstream mLuaFile; virtual void HandleMessage(ui::EventArgs& msg); - + std::string mLuaScript; std::string m_url; int m_port; bool m_connected; diff --git a/examples/proto_debuger/tcp_server.lua b/examples/proto_debuger/tcp_server.lua new file mode 100644 index 00000000..dae452fd --- /dev/null +++ b/examples/proto_debuger/tcp_server.lua @@ -0,0 +1,16 @@ +require("string") +local file = io.open("writetest.txt", "w+") + +function OnNewClient(ip,port) + showdata("on new client from lua " .. ip..port) +end + +function OnClientRecvData(data,ip,port) + showdata("client recieve data from lua "..data.. ip..port) +end + + +function OnClientDisconnect(ip,port) + showdata("client leave from lua " .. ip..port) +end + diff --git a/examples/proto_debuger/tcp_server_form.cpp b/examples/proto_debuger/tcp_server_form.cpp index 9b2f9ac8..0e2483fd 100644 --- a/examples/proto_debuger/tcp_server_form.cpp +++ b/examples/proto_debuger/tcp_server_form.cpp @@ -1,7 +1,7 @@ #include "tcp_server_form.h" #include "utils.h" #include - +#include "lua_bind.h" extern "C" { #include "event2/bufferevent.h" @@ -22,7 +22,7 @@ TcpServerFrom::TcpServerFrom(ui::Window* hwnd, string url, mFlagSelectClient = true; mLua = new LuaDelegate; - mLuaFile.open("script.lua"); + mLuaFile.open("tcp_server.lua"); std::string lua_script; if (mLuaFile.is_open()) { std::string s; @@ -40,6 +40,7 @@ TcpServerFrom::TcpServerFrom(ui::Window* hwnd, string url, TcpServerLibevent::OnDisconnect handler2 = std::bind(&TcpServerFrom::OnDisConnected, this, std::placeholders::_1); m_server->SetConnectionLeaveHandle(handler2); + this->mLua->BindFunction("showdata", LuaShowData); } @@ -70,7 +71,45 @@ void TcpServerFrom::Init() m_label_2 = dynamic_cast(FindSubControl(L"title")); m_combo_1 = dynamic_cast(FindSubControl(L"clients")); m_button_3 = dynamic_cast(FindSubControl(L"btn_do_lua")); + m_btn_save_lua = dynamic_cast(FindSubControl(L"btn_save_lua")); + if (nullptr != m_button_1) { + m_button_1->AttachClick([this](ui::EventArgs* ev) { + auto client = m_combo_1->GetText(); + if (client != L"全部连接") { + int clii = atoi(wstring2string(client).c_str()); + if (nullptr != this->mClients[clii]) { + std::wstring send = m_rich_edit_3->GetText(); + this->mClients[clii]->WriteData(wstring2string(send).c_str(), + wstring2string(send).size()); + } + } + else { + if ((nullptr != m_rich_edit_3)) { + std::wstring send = m_rich_edit_3->GetText(); + for (auto itr = this->mClients.begin(); itr != this->mClients.end(); itr++) { + itr->second->WriteData(wstring2string(send).c_str(), + wstring2string(send).size()); + } + } + } + return true; + }); + } + + m_btn_save_lua->AttachClick([this](ui::EventArgs* ev) { + std::cout << "保存lua脚本\r\n"; + std::string lua = wstring2string(mEditLua->GetText()); + if (0 == this->mLua->UpdateScript(lua)) { + this->mLuaScript = lua; + } + else { + MessageBox(0, L"lua脚本错误", L"", 0); + return true; + } + std::cout << lua.c_str() << "\r\n"; + return true; + }); m_button_3->AttachClick([this](ui::EventArgs*ev) { std::cout <<"m_button_3 " << wstring2string(this->m_combo_1->GetText())<IpAddress() << p->SocketFd() << std::endl; updateStatus(); - + int ret = mLua->CallFuntion < std::string, LUA_INTEGER >("OnNewClient",p->IpAddress(),p->SocketFd()); + if (ret < 0) { + std::cout << "call funtion error" << ret<<"std::endl"; + } auto element = new ui::ListContainerElement; element->SetClass(L"listitem"); element->SetFixedHeight(30); @@ -106,11 +148,15 @@ void TcpServerFrom::OnNewConnAccept(ConnectionLibevent* p) mClients[p->SocketFd()] = p; m_combo_1->Add(element); p->SetRecvHandler( - [this](char* p, uint32_t len) { - std::cout << "SetRecvHandler " << p; + [this,p](char* recv, uint32_t len) { + std::cout << "RecvHandler "<IpAddress()<SocketFd() <<" " << recv; + int ret = this->mLua->CallFuntion + ("OnClientRecvData", std::string(recv),p->IpAddress(), p->SocketFd()); + if (ret < 0) { + MessageBox(0, L"lua脚本错误 OnClientRecvData", L"", 0); + } } ); - return; } @@ -119,6 +165,11 @@ void TcpServerFrom::OnDisConnected(ConnectionLibevent* cli) std::cout << "TcpServerFrom Disconnected" << cli->IpAddress() << " fd " << cli->SocketFd() << std::endl; updateStatus(); mClients.erase(cli->SocketFd()); + int ret = this->mLua->CallFuntion + ("OnClientDisconnect", cli->IpAddress(), cli->SocketFd()); + if (ret < 0) { + MessageBox(0, L"lua脚本错误 OnClientRecvData", L"", 0); + } } LuaDelegate* TcpServerFrom::LuaVM() @@ -132,7 +183,7 @@ void TcpServerFrom::ShowDataInEdit(const char* value) std::cout << "nullp pointer in ShowDataInEdit" << std::endl; return; } - + m_rich_edit_1->AppendText(string2wstring(std::string(value))); } void TcpServerFrom::updateStatus() diff --git a/examples/proto_debuger/tcp_server_form.h b/examples/proto_debuger/tcp_server_form.h index 3f9f0020..e6665f88 100644 --- a/examples/proto_debuger/tcp_server_form.h +++ b/examples/proto_debuger/tcp_server_form.h @@ -22,7 +22,7 @@ public: void OnNewConnAccept(ConnectionLibevent*); void OnDisConnected(ConnectionLibevent*); LuaDelegate* LuaVM(); - + std::map mClients; protected: void ShowDataInEdit(const char*) override; @@ -43,11 +43,11 @@ private: ui::CheckBox* m_check_box_3; ui::CheckBox* m_check_box_4; ui::Button* m_button_2; + ui::Button* m_btn_save_lua; ui::Label* m_label_2; ui::Combo* m_combo_1; ui::Button* m_button_3; std::ifstream mLuaFile; - std::map mClients; bool mFlagSelectClient; LuaDelegate *mLua; std::string mLuaScript; 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 index e1b013f2..67e4d964 100644 --- a/examples/x64/Debug/resources/themes/default/basic/tcp_server_form.xml +++ b/examples/x64/Debug/resources/themes/default/basic/tcp_server_form.xml @@ -26,6 +26,8 @@