From 3a3887a7638cac08a27ec58a0ce0d01829904a34 Mon Sep 17 00:00:00 2001 From: zcy <290198252@qq.com> Date: Wed, 9 Mar 2022 17:12:36 +0800 Subject: [PATCH] no message --- examples/proto_debuger/base_form.cpp | 27 +- examples/proto_debuger/websocket_client.cpp | 439 +++++++++--------- .../proto_debuger/websocket_client_form.cpp | 27 +- 3 files changed, 257 insertions(+), 236 deletions(-) diff --git a/examples/proto_debuger/base_form.cpp b/examples/proto_debuger/base_form.cpp index 5c9378a1..ce0a37b8 100644 --- a/examples/proto_debuger/base_form.cpp +++ b/examples/proto_debuger/base_form.cpp @@ -130,7 +130,6 @@ LRESULT BasicForm::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) // delete mRightShow; mRightShow = nullptr; } - if (uMsg == WM_USER_TCP_SERVER_CLOSE) { wprintf(L"close %s\r\n", ((wstring*)wParam)->c_str()); mRightShow->SetVisible(false); @@ -154,7 +153,6 @@ LRESULT BasicForm::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) if (uMsg == WM_USER_POS_CHANGED) { } - if (uMsg == WM_ADD_TCPCLIENT_MONITOR) { TcpClientInfo* info = (TcpClientInfo*)wParam; TcpClientLibevent* cli = (TcpClientLibevent*)lParam; @@ -212,7 +210,6 @@ LRESULT BasicForm::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) if (mWebsocketClientForm.find(info->ip) == mWebsocketClientForm.end()) { WebsocketClient* client = (WebsocketClient*)lParam; - auto form = new WebsocketClientForm(this, wstring2string(info->ip),client); form->SetChildLayoutXML(L"basic/tcp_server_form.xml"); form->SetName(key); @@ -226,10 +223,28 @@ LRESULT BasicForm::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) 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()); - + } + WebsocketClientForm* p = mWebsocketClientForm[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; @@ -427,7 +442,6 @@ LRESULT BasicForm::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) } else { p->SetVisible(true); - mRightSide->SelectItem(p->GetName()); mRightShow = p; } @@ -489,15 +503,12 @@ void BasicForm::InitWindow(){ node->SetFixedHeight(30); mMonitor->GetRootNode()->AddChildNode(node); - - node = new ui::TreeNode; node->SetText(nbase::StringPrintf(L"udp group")); node->SetClass(L"list_topitem"); node->SetFixedHeight(30); mMonitor->GetRootNode()->AddChildNode(node); - node = new ui::TreeNode; node->SetText(nbase::StringPrintf(L"websocket client")); node->SetClass(L"list_topitem"); diff --git a/examples/proto_debuger/websocket_client.cpp b/examples/proto_debuger/websocket_client.cpp index b16838fc..757eb177 100644 --- a/examples/proto_debuger/websocket_client.cpp +++ b/examples/proto_debuger/websocket_client.cpp @@ -11,245 +11,256 @@ void on_message(WebsocketClient* c, websocketpp::connection_hdl hdl, message_ptr if (ec) { std::cout << "Echo failed because: " << ec.message() << std::endl; } - if (c->m_onread != nullptr) { - c->m_onread(c,msg->get_payload()); - } + if (c->m_onread != nullptr) { + c->m_onread(c, msg->get_payload()); + } } -int WebsocketClient::SendMsg(const char * str,uint32_t len, - websocketpp::frame::opcode::value opcode) +int WebsocketClient::SendMsg(const char* str, uint32_t len, + websocketpp::frame::opcode::value opcode) { - if(this->m_status != WebsocketClient::CONNECTED) - return -1; - if(m_tls){ - websocketpp::lib::error_code ec; - this->m_client_tls.send(m_conn_tls,str,len,opcode,ec); - if (ec) { - std::cout << "Echo failed because: " << ec.message() << std::endl; - return -1; - } - }else{ - websocketpp::lib::error_code ec; - this->m_client.send(m_conn,str,len,opcode,ec); - if (ec) { - std::cout << "Echo failed because: " << ec.message() << std::endl; - return -1; - } - } + if (this->m_status != WebsocketClient::CONNECTED) + return -1; + if (m_tls) { + websocketpp::lib::error_code ec; + this->m_client_tls.send(m_conn_tls, str, len, opcode, ec); + if (ec) { + std::cout << "Echo failed because: " << ec.message() << std::endl; + return -1; + } + } + else { + websocketpp::lib::error_code ec; + this->m_client.send(m_conn, str, len, opcode, ec); + if (ec) { + std::cout << "Echo failed because: " << ec.message() << std::endl; + return -1; + } + } return 0; } - -void on_open(WebsocketClient * c, websocketpp::connection_hdl hdl) { - if(c->m_tls){ - TlsClient::connection_ptr con = c->m_client_tls.get_con_from_hdl(hdl); - uint32_t usocket = con->get_raw_socket().native_handle(); - auto m_server = con->get_response_header("Server"); - std::cout<<"open from server"<m_status = WebsocketClient::CONNECTED; - if (c->m_on_connected != nullptr) { - c->m_on_connected(c); - } - }else{ - Client::connection_ptr con = c->m_client.get_con_from_hdl(hdl); - uint32_t usocket = con->get_raw_socket().native_handle(); - auto m_server = con->get_response_header("Server"); - std::cout<<"open from server"<m_status = WebsocketClient::CONNECTED; - if (c->m_on_connected != nullptr) { - c->m_on_connected(c); - } - } + +void on_open(WebsocketClient* c, websocketpp::connection_hdl hdl) { + if (c->m_tls) { + TlsClient::connection_ptr con = c->m_client_tls.get_con_from_hdl(hdl); + uint32_t usocket = con->get_raw_socket().native_handle(); + auto m_server = con->get_response_header("Server"); + std::cout << "open from server" << m_server << std::endl; + c->m_status = WebsocketClient::CONNECTED; + if (c->m_on_connected != nullptr) { + c->m_on_connected(c); + } + } + else { + Client::connection_ptr con = c->m_client.get_con_from_hdl(hdl); + uint32_t usocket = con->get_raw_socket().native_handle(); + auto m_server = con->get_response_header("Server"); + std::cout << "open from server" << m_server << std::endl; + c->m_status = WebsocketClient::CONNECTED; + if (c->m_on_connected != nullptr) { + c->m_on_connected(c); + } + } } - -void on_close(WebsocketClient * c, websocketpp::connection_hdl hdl) { - // m_status = "Open"; - // client::connection_ptr con = c->get_con_from_hdl(hdl); - // m_server = con->get_response_header("Server"); - c->m_status = WebsocketClient::CLOSED; - std::cout<<"on_close"<m_on_disconnected != nullptr) { - c->m_on_disconnected(c,WebsocketClient::CloseReason::LOCAL_CLOSED); - } +void on_close(WebsocketClient* c, websocketpp::connection_hdl hdl) { + // m_status = "Open"; + + // client::connection_ptr con = c->get_con_from_hdl(hdl); + // m_server = con->get_response_header("Server"); + c->m_status = WebsocketClient::CLOSED; + std::cout << "on_close" << std::endl; + if (c->m_on_disconnected != nullptr) { + c->m_on_disconnected(c, WebsocketClient::CloseReason::LOCAL_CLOSED); + } } -void on_fail(WebsocketClient * c, websocketpp::connection_hdl hdl) { - std::cout<<"on_fail"<m_client.get_con_from_hdl(hdl); - auto state = con->get_state(); - if(state == websocketpp::session::state::closed) - std::cout<m_status = WebsocketClient::FAIL; - if (c->m_on_disconnected != nullptr) { - c->m_on_disconnected(c,WebsocketClient::CloseReason::PEER_CLOSED); - } +void on_fail(WebsocketClient* c, websocketpp::connection_hdl hdl) { + std::cout << "on_fail" << std::endl; + Client::connection_ptr con = c->m_client.get_con_from_hdl(hdl); + auto state = con->get_state(); + if (state == websocketpp::session::state::closed) + std::cout << state << " on_fail " << std::endl; + c->m_status = WebsocketClient::FAIL; + if (c->m_on_disconnected != nullptr) { + c->m_on_disconnected(c, WebsocketClient::CloseReason::PEER_CLOSED); + } } -WebsocketClient::~WebsocketClient(){ +WebsocketClient::~WebsocketClient() { - this->m_status = WebsocketClient::STOP; - m_client.stop(); - m_thread->join(); + this->m_status = WebsocketClient::STOP; + m_client.stop(); + m_thread->join(); } -WebsocketClient::WebsocketClient(std::string url,bool tls) +WebsocketClient::WebsocketClient(std::string url, bool tls) { - m_tls = tls; - m_auto_reconn = false; + m_tls = tls; + m_auto_reconn = false; m_url = url; - if(m_tls){ -// Set logging to be pretty verbose (everything except message payloads) - m_client_tls.set_access_channels(websocketpp::log::alevel::all); - m_client_tls.clear_access_channels(websocketpp::log::alevel::frame_payload); - m_client_tls.set_tls_init_handler([this](websocketpp::connection_hdl){ - return websocketpp::lib::make_shared(asio::ssl::context::tlsv1); - }); - // Initialize ASIO - m_client_tls.init_asio(); - m_thread = new std::thread([this]() - { - while (this->m_status != STOP) - { - m_client_tls.set_message_handler(bind(&on_message, this, ::_1, ::_2)); - websocketpp::lib::error_code ec; - std::cout<<"1"<m_url, ec); - m_conn_tls->set_open_handler(websocketpp::lib::bind( - &on_open, - this, - websocketpp::lib::placeholders::_1 - )); - m_conn_tls->set_fail_handler(websocketpp::lib::bind( - &on_fail, - this, - websocketpp::lib::placeholders::_1 - )); - m_conn_tls->set_close_handler(websocketpp::lib::bind( - &on_close, - this, - websocketpp::lib::placeholders::_1 - )); - if (ec) { - std::cout << "could not create connection because: " << ec.message() << std::endl; - this->m_status = Status::FAIL; - } - std::cout<<"2"<get_state() != websocketpp::session::state::open) - std::cout<get_state() <<" websocketpp::session::state "<m_status = WebsocketClient::CONNECTING; - while((this->m_status != WebsocketClient::FAIL) && - (this->m_status != WebsocketClient::CLOSED) - &&(this->m_status != WebsocketClient::STOP) - ){ - try{ - // while(this->m_status == WebsocketClient::CONNECTED){ - int count_of_handler = this->m_client_tls.run(); - // std::cout<<"count_of_handler: " << count_of_handler<m_on_disconnected(this,WebsocketClient::CloseReason::LOCAL_CLOSED); - }); - } - else{ - // Set logging to be pretty verbose (everything except message payloads) - m_client.set_access_channels(websocketpp::log::alevel::all); - m_client.clear_access_channels(websocketpp::log::alevel::frame_payload); + this->m_status = WebsocketClient::CONNECTING; + + if (m_tls) { + // Set logging to be pretty verbose (everything except message payloads) + m_client_tls.set_access_channels(websocketpp::log::alevel::all); + m_client_tls.clear_access_channels(websocketpp::log::alevel::frame_payload); + m_client_tls.set_tls_init_handler([this](websocketpp::connection_hdl) { + return websocketpp::lib::make_shared(asio::ssl::context::tlsv1); + }); + // Initialize ASIO + m_client_tls.init_asio(); + m_thread = new std::thread([this]() + { + while (this->m_status != STOP) + { + m_client_tls.set_message_handler(bind(&on_message, this, ::_1, ::_2)); + websocketpp::lib::error_code ec; + std::cout << "1" << std::endl; + m_conn_tls = m_client_tls.get_connection(this->m_url, ec); + m_conn_tls->set_open_handler(websocketpp::lib::bind( + &on_open, + this, + websocketpp::lib::placeholders::_1 + )); + m_conn_tls->set_fail_handler(websocketpp::lib::bind( + &on_fail, + this, + websocketpp::lib::placeholders::_1 + )); + m_conn_tls->set_close_handler(websocketpp::lib::bind( + &on_close, + this, + websocketpp::lib::placeholders::_1 + )); + if (ec) { + std::cout << "could not create connection because: " << ec.message() << std::endl; + this->m_status = Status::FAIL; + } + std::cout << "2" << std::endl; + + // Note that connect here only requests a connection. No network messages are + // exchanged until the event loop starts running in the next line. + TlsClient::connection_ptr ptr = m_client_tls.connect(m_conn_tls); + if (ptr->get_state() != websocketpp::session::state::open) + std::cout << ptr->get_state() << " websocketpp::session::state " << std::endl; + // Start the ASIO io_service run loop + // this will cause a single connection to be made to the server. c.run() + // will exit when this connection is closed. + std::cout << "3 " << ptr << " " << m_conn_tls << std::endl; + this->m_status = WebsocketClient::CONNECTING; + while ((this->m_status != WebsocketClient::FAIL) && + (this->m_status != WebsocketClient::CLOSED) + && (this->m_status != WebsocketClient::STOP) + ) { + try { + // while(this->m_status == WebsocketClient::CONNECTED){ + int count_of_handler = this->m_client_tls.run(); + // std::cout<<"count_of_handler: " << count_of_handler<m_on_disconnected(this, WebsocketClient::CloseReason::LOCAL_CLOSED); + }); + } + else { + // Set logging to be pretty verbose (everything except message payloads) + m_client.set_access_channels(websocketpp::log::alevel::all); + m_client.clear_access_channels(websocketpp::log::alevel::frame_payload); + + // Initialize ASIO + this->m_client.init_asio(); + m_thread = new std::thread([this]() + { + while (this->m_status != STOP) + { + this->m_client.set_message_handler(bind(&on_message, this, ::_1, ::_2)); + websocketpp::lib::error_code ec; + std::cout << "1" << std::endl; + m_conn = m_client.get_connection(this->m_url, ec); + if (m_conn != nullptr) { + m_conn->set_open_handler(websocketpp::lib::bind( + &on_open, + this, + websocketpp::lib::placeholders::_1 + )); + m_conn->set_fail_handler(websocketpp::lib::bind( + &on_fail, + this, + websocketpp::lib::placeholders::_1 + )); + m_conn->set_close_handler(websocketpp::lib::bind( + &on_close, + this, + websocketpp::lib::placeholders::_1 + )); + } + if (ec) { + std::cout << "could not create connection because: " << ec.message() << std::endl; + this->m_status = Status::FAIL; + if (m_on_disconnected) + m_on_disconnected(this, WebsocketClient::CloseReason::LOCAL_CLOSED); + break; + } + std::cout << "2" << std::endl; + + // Note that connect here only requests a connection. No network messages are + // exchanged until the event loop starts running in the next line. + Client::connection_ptr ptr = this->m_client.connect(m_conn); + if (ptr->get_state() != websocketpp::session::state::open) + std::cout << ptr->get_state() << " websocketpp::session::state " << std::endl; + // Start the ASIO io_service run loop + // this will cause a single connection to be made to the server. c.run() + // will exit when this connection is closed. + std::cout << "3 " << ptr << " " << m_conn_tls << std::endl; + this->m_status = WebsocketClient::CONNECTING; + while ((this->m_status != WebsocketClient::FAIL) && + (this->m_status != WebsocketClient::CLOSED) + && (this->m_status != WebsocketClient::STOP) + ) { + try { + // while(this->m_status == WebsocketClient::CONNECTED){ + int count_of_handler = this->m_client.run(); + // std::cout<<"count_of_handler: " << count_of_handler<m_client.init_asio(); - m_thread = new std::thread([this]() - { - while (this->m_status != STOP) - { - this->m_client.set_message_handler(bind(&on_message, this, ::_1, ::_2)); - websocketpp::lib::error_code ec; - std::cout<<"1"<m_url, ec); - m_conn->set_open_handler(websocketpp::lib::bind( - &on_open, - this, - websocketpp::lib::placeholders::_1 - )); - m_conn->set_fail_handler(websocketpp::lib::bind( - &on_fail, - this, - websocketpp::lib::placeholders::_1 - )); - m_conn->set_close_handler(websocketpp::lib::bind( - &on_close, - this, - websocketpp::lib::placeholders::_1 - )); - if (ec) { - std::cout << "could not create connection because: " << ec.message() << std::endl; - this->m_status = Status::FAIL; - } - std::cout<<"2"<m_client.connect(m_conn); - if(ptr->get_state() != websocketpp::session::state::open) - std::cout<get_state() <<" websocketpp::session::state "<m_status = WebsocketClient::CONNECTING; - while((this->m_status != WebsocketClient::FAIL) && - (this->m_status != WebsocketClient::CLOSED) - &&(this->m_status != WebsocketClient::STOP) - ){ - try{ - // while(this->m_status == WebsocketClient::CONNECTED){ - int count_of_handler = this->m_client.run(); - // std::cout<<"count_of_handler: " << count_of_handler<m_on_disconnected(this,WebsocketClient::CloseReason::LOCAL_CLOSED); - - }); - } - } -int WebsocketClient::SetOnConnectedHandler(OnConnectedHandler on_connected){ - this->m_on_connected = on_connected; - return 0; +int WebsocketClient::SetOnConnectedHandler(OnConnectedHandler on_connected) { + this->m_on_connected = on_connected; + return 0; } -int WebsocketClient::SetOnDisConnectedHandler(OnDisConnectedHandler on_disconnected){ - this->m_on_disconnected = on_disconnected; - return 0; +int WebsocketClient::SetOnDisConnectedHandler(OnDisConnectedHandler on_disconnected) { + this->m_on_disconnected = on_disconnected; + return 0; } -int WebsocketClient::SetOnReadHandler(OnReadHandler onread){ - this->m_onread = onread; - return 0; +int WebsocketClient::SetOnReadHandler(OnReadHandler onread) { + this->m_onread = onread; + return 0; } diff --git a/examples/proto_debuger/websocket_client_form.cpp b/examples/proto_debuger/websocket_client_form.cpp index 2f65eada..524b1a29 100644 --- a/examples/proto_debuger/websocket_client_form.cpp +++ b/examples/proto_debuger/websocket_client_form.cpp @@ -1,4 +1,5 @@ #include "websocket_client_form.h" +#include "utils.h" WebsocketClientForm::WebsocketClientForm(ui::Window* hwnd, string url, WebsocketClient* p) { @@ -28,26 +29,24 @@ void WebsocketClientForm::Init() m_btn_close_form = dynamic_cast(FindSubControl(L"btn_close_uart")); if (nullptr != m_btn_close_form) - m_btn_close_form->AttachClick([this](const ui::EventArgs *ev) { - - - return true; - } - ); + m_btn_close_form->AttachClick([this](const ui::EventArgs* ev) { + + return true; + } + ); + if(nullptr != m_btn_save_lua) m_btn_save_lua->AttachClick( - [this](ui::EventArgs* ev) - { - - return true; - } - ); + [this](ui::EventArgs* ev){ + + return true; + } + ); if (nullptr != m_btn_send_data) { m_btn_send_data->AttachClick([this](const ui::EventArgs* ev) { return true; }); - } } @@ -58,5 +57,5 @@ LuaDelegate* WebsocketClientForm::LuaVM() void WebsocketClientForm::ShowDataInEdit(const char*src) { - + m_rich_edit_1->AppendText(string2wstring(std::string(src)),false); }