no message

This commit is contained in:
zcy 2022-03-13 21:41:02 +08:00
parent d547b64721
commit 021f1653b7
5 changed files with 136 additions and 43 deletions

View File

@ -253,7 +253,7 @@ LRESULT BasicForm::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
if (ui::EventType::kEventSelect == ev->Type) { if (ui::EventType::kEventSelect == ev->Type) {
wprintf(L"%s\r\n", dynamic_cast<ui::TreeNode*> (ev->pSender)->GetText().c_str()); wprintf(L"%s\r\n", dynamic_cast<ui::TreeNode*> (ev->pSender)->GetText().c_str());
printf("GetCurSel %d\r\n", mRightSide->GetCurSel()); printf("GetCurSel %d\r\n", mRightSide->GetCurSel());
}
WebsocketClientForm* p = mWebsocketClientForm[dynamic_cast<ui::TreeNode*> (ev->pSender)->GetText()]; WebsocketClientForm* p = mWebsocketClientForm[dynamic_cast<ui::TreeNode*> (ev->pSender)->GetText()];
if (p != nullptr) { if (p != nullptr) {
printf("GetCurSel %d\r\n", mRightSide->GetCurSel()); printf("GetCurSel %d\r\n", mRightSide->GetCurSel());
@ -272,6 +272,7 @@ LRESULT BasicForm::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
mRightShow = p; mRightShow = p;
} }
} }
}
return true; return true;
} }
); );
@ -282,14 +283,14 @@ LRESULT BasicForm::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
ui::TreeNode* node = new ui::TreeNode; ui::TreeNode* node = new ui::TreeNode;
mMonitor->GetRootNode()->GetChildNode(6)->AddChildNode(node); mMonitor->GetRootNode()->GetChildNode(6)->AddChildNode(node);
auto key = info->ip; auto key = info->ip + std::to_wstring(info->port);
node->SetText(key); node->SetText(key);
node->SetClass(L"listitem"); node->SetClass(L"listitem");
if (mWebsocketServerForm.find(info->ip) == mWebsocketServerForm.end()) if (mWebsocketServerForm.find(info->ip) == mWebsocketServerForm.end())
{ {
WebsocketServer* server = (WebsocketServer*)lParam; WebsocketServer* server = (WebsocketServer*)lParam;
auto form = new WebsocketServerForm(this, wstring2string(info->ip), server); auto form = new WebsocketServerForm(this, wstring2string(key), server);
form->SetChildLayoutXML(L"basic/tcp_server_form.xml"); form->SetChildLayoutXML(L"basic/tcp_server_form.xml");
form->SetName(key); form->SetName(key);
@ -303,7 +304,7 @@ LRESULT BasicForm::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
if (ui::EventType::kEventSelect == ev->Type) { if (ui::EventType::kEventSelect == ev->Type) {
wprintf(L"%s\r\n", dynamic_cast<ui::TreeNode*> (ev->pSender)->GetText().c_str()); wprintf(L"%s\r\n", dynamic_cast<ui::TreeNode*> (ev->pSender)->GetText().c_str());
printf("GetCurSel %d\r\n", mRightSide->GetCurSel()); printf("GetCurSel %d\r\n", mRightSide->GetCurSel());
}
WebsocketServerForm* p = mWebsocketServerForm[dynamic_cast<ui::TreeNode*> WebsocketServerForm* p = mWebsocketServerForm[dynamic_cast<ui::TreeNode*>
(ev->pSender)->GetText()]; (ev->pSender)->GetText()];
if (p != nullptr) { if (p != nullptr) {
@ -323,6 +324,7 @@ LRESULT BasicForm::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
mRightShow = p; mRightShow = p;
} }
} }
}
return true; return true;
} }
); );
@ -650,6 +652,11 @@ LuaBindInterface* BasicForm::FindCurrentFormByLuaPointer(lua_State* pointer)
return (LuaBindInterface*)itr->second; return (LuaBindInterface*)itr->second;
} }
} }
for (auto itr = mWebsocketServerForm.begin(); itr != mWebsocketServerForm.end(); itr++) {
if (itr->second->LuaVM()->VM() == pointer) {
return (LuaBindInterface*)itr->second;
}
}
return nullptr; return nullptr;
} }

View File

@ -10,7 +10,11 @@ void on_new_connection(WebsocketServer* s, websocketpp::connection_hdl hdl){
auto host = con->get_host(); auto host = con->get_host();
auto uri = con->get_uri(); auto uri = con->get_uri();
auto resource = con->get_resource(); auto resource = con->get_resource();
std::cout<<socket << " "<<addr<<" "<< host<<" "<<uri<<" "<<resource<<"\r\n"; std::cout<<"sock" << socket << socket.remote_endpoint().port() << "addr " << addr << "host " << host << "uri" << uri
<< "resource " << resource << "\r\n";
if (s->m_on_connection)
s->m_on_connection(addr.to_string(),
socket.remote_endpoint().port());
} }
@ -20,6 +24,13 @@ void on_connection_close(WebsocketServer* s, websocketpp::connection_hdl hdl){
WsServer::connection_ptr con = s->m_server->get_con_from_hdl(hdl); WsServer::connection_ptr con = s->m_server->get_con_from_hdl(hdl);
auto socket = con->get_raw_socket().native_handle(); auto socket = con->get_raw_socket().native_handle();
s->m_clients.erase(socket); s->m_clients.erase(socket);
auto addr = con->get_socket().remote_endpoint().address();
auto host = con->get_host();
auto uri = con->get_uri();
auto resource = con->get_resource();
if (s->m_on_close)
s->m_on_close(addr.to_string(), socket.remote_endpoint().port());
} }
// Define a callback to handle incoming messages // Define a callback to handle incoming messages
@ -27,7 +38,17 @@ void on_message(WebsocketServer* s, websocketpp::connection_hdl hdl, message_ptr
std::cout << "on_message called with hdl: " << hdl.lock().get() std::cout << "on_message called with hdl: " << hdl.lock().get()
<< " and message: " << msg->get_payload() << " and message: " << msg->get_payload()
<< std::endl; << std::endl;
WsServer::connection_ptr con = s->m_server->get_con_from_hdl(hdl);
auto socket = con->get_raw_socket().native_handle();
s->m_clients[socket] = hdl;
auto addr = con->get_socket().remote_endpoint().address();
auto host = con->get_host();
auto uri = con->get_uri();
auto resource = con->get_resource();
if (s->m_on_message)
s->m_on_message(addr.to_string(),
socket.remote_endpoint().port(), msg->get_payload());
// check for a special command to instruct the server to stop listening so // check for a special command to instruct the server to stop listening so
// it can be cleanly exited. // it can be cleanly exited.
/* /*
@ -45,8 +66,19 @@ void on_message(WebsocketServer* s, websocketpp::connection_hdl hdl, message_ptr
*/ */
} }
std::string WebsocketServer::Url()
{
return m_url;
}
uint32_t WebsocketServer::Port()
{
return m_port;
}
WebsocketServer::WebsocketServer(std::string server,uint32_t port){ WebsocketServer::WebsocketServer(std::string server,uint32_t port){
m_port = port; m_port = port;
m_url = server;
m_server = new WsServer; m_server = new WsServer;
m_thread = new std::thread([this](){ m_thread = new std::thread([this](){
// Set logging settings // Set logging settings
@ -97,3 +129,21 @@ int WebsocketServer::SendDataAllClient(const char* dat,int len,
return 0; return 0;
} }
void WebsocketServer::SetOnNewConnectionHanlder(OnNewConnectionHanlder handler)
{
if (handler)
m_on_connection = handler;
}
void WebsocketServer::SetOnConnectionCloseHanlder(OnConnectionCloseHanlder handler)
{
if(handler)
this->m_on_close = handler;
}
void WebsocketServer::SetOnMessageHanlder(OnMessageHanlder handler)
{
if (handler)
this->m_on_message = handler;
}

View File

@ -18,19 +18,30 @@ typedef WsServer::message_ptr message_ptr;
class WebsocketServer { class WebsocketServer {
public: public:
typedef std::function<void(std::string addr, uint32_t port)> OnNewConnectionHanlder;
typedef std::function<void(std::string addr, uint32_t port)> OnConnectionCloseHanlder;
typedef std::function<void(std::string addr, uint32_t port,std::string message)> OnMessageHanlder;
std::string Url();
uint32_t Port();
WebsocketServer(std::string server,uint32_t port); WebsocketServer(std::string server,uint32_t port);
friend void on_new_connection(WebsocketServer* s, websocketpp::connection_hdl hdl); friend void on_new_connection(WebsocketServer* s, websocketpp::connection_hdl hdl);
friend void on_message(WebsocketServer* s, websocketpp::connection_hdl hdl, message_ptr msg); friend void on_message(WebsocketServer* s, websocketpp::connection_hdl hdl, message_ptr msg);
friend void on_connection_close(WebsocketServer* s, websocketpp::connection_hdl hdl); friend void on_connection_close(WebsocketServer* s, websocketpp::connection_hdl hdl);
int SendData(uint32_t,const char *data,int len,websocketpp::frame::opcode::value); int SendData(uint32_t,const char *data,int len,websocketpp::frame::opcode::value);
int SendDataAllClient(const char *data,int len,websocketpp::frame::opcode::value); int SendDataAllClient(const char *data,int len,websocketpp::frame::opcode::value);
void SetOnNewConnectionHanlder(OnNewConnectionHanlder);
void SetOnConnectionCloseHanlder(OnConnectionCloseHanlder);
void SetOnMessageHanlder(OnMessageHanlder);
private: private:
std::string m_url; // 地址 std::string m_url; // 地址
uint32_t m_port; // url uint32_t m_port; // url
WsServer *m_server; WsServer *m_server;
std::thread *m_thread; std::thread *m_thread;
std::mutex m_mutex; std::mutex m_mutex;
OnNewConnectionHanlder m_on_connection;
OnConnectionCloseHanlder m_on_close;
OnMessageHanlder m_on_message;
std::map<uint32_t,websocketpp::connection_hdl> m_clients; std::map<uint32_t,websocketpp::connection_hdl> m_clients;
}; };

View File

@ -0,0 +1 @@
require("string") local file = io.open("writetest.txt", "w+") function OnWebSocketDataServer (addr,port,message) showdata("OnWebSocketDataServer " .. message.."\r\n") end function OnWebsocketNewConnection(addr,port) showdata("OnWebsocketNewConnection " .. addr.."\r\n") end function OnWebsocketCloseConnection(addr,port) showdata("dfasdfsddfasda" .. addr.."\r\n") end

View File

@ -3,15 +3,13 @@
#define WEBSOCKET_SERVER_LUA "websocket_server.lua" #define WEBSOCKET_SERVER_LUA "websocket_server.lua"
WebsocketServerForm::WebsocketServerForm(ui::Window* hwnd, string url, WebsocketServer* server) WebsocketServerForm::WebsocketServerForm(ui::Window* hwnd, string url,
WebsocketServer* server)
{ {
if (nullptr != hwnd) { if (nullptr != hwnd) {
this->SetWindow(hwnd, nullptr, false); this->SetWindow(hwnd, nullptr, false);
} }
m_server = server; m_server = server;
if (nullptr != server) {
}
mLua = new LuaDelegate; mLua = new LuaDelegate;
mLuaFile.open(WEBSOCKET_SERVER_LUA); mLuaFile.open(WEBSOCKET_SERVER_LUA);
@ -31,6 +29,7 @@ WebsocketServerForm::WebsocketServerForm(ui::Window* hwnd, string url, Websocket
void WebsocketServerForm::Init() void WebsocketServerForm::Init()
{ {
ui::ChildBox::Init(); ui::ChildBox::Init();
m_label_1 = dynamic_cast<ui::Label*>(FindSubControl(L"server_info")); m_label_1 = dynamic_cast<ui::Label*>(FindSubControl(L"server_info"));
m_rich_edit_1 = dynamic_cast<ui::RichEdit*>(FindSubControl(L"server_recv_edit")); m_rich_edit_1 = dynamic_cast<ui::RichEdit*>(FindSubControl(L"server_recv_edit"));
m_rich_edit_2 = dynamic_cast<ui::RichEdit*>(FindSubControl(L"lua_script_edit")); m_rich_edit_2 = dynamic_cast<ui::RichEdit*>(FindSubControl(L"lua_script_edit"));
@ -40,6 +39,26 @@ void WebsocketServerForm::Init()
m_rich_edit_2->SetText(string2wstring(mLuaScript)); m_rich_edit_2->SetText(string2wstring(mLuaScript));
m_label_1->SetText(string2wstring(this->m_server->Url()) + L":"
+ std::to_wstring(m_server->Port()));
if (nullptr != m_server) {
m_server->SetOnConnectionCloseHanlder([this](std::string addr, uint32_t port) {
this->mLua->CallFuntion<std::string, lua_Integer>("OnWebsocketCloseConnection",
addr, int(port));
});
m_server->SetOnNewConnectionHanlder([this](std::string addr, uint32_t port) {
this->mLua->CallFuntion<std::string, lua_Integer>("OnWebsocketNewConnection",
addr, int(port));
});
m_server->SetOnMessageHanlder([this](std::string addr, uint32_t port, std::string message)
{
std::cout<<"SetOnMessageHanlder\r\n";
std::cout << addr << port << message<<"\r\n";
this->mLua->CallFuntion<std::string, lua_Integer,std::string>("OnWebSocketDataServer", addr,int(port),message);
});
}
m_websocket_send_edit = dynamic_cast<ui::RichEdit*>(FindSubControl(L"server_send_edit")); m_websocket_send_edit = dynamic_cast<ui::RichEdit*>(FindSubControl(L"server_send_edit"));
m_btn_send_data = dynamic_cast<ui::Button*>(FindSubControl(L"btn_send_data")); m_btn_send_data = dynamic_cast<ui::Button*>(FindSubControl(L"btn_send_data"));
m_check_box_2 = dynamic_cast<ui::CheckBox*>(FindSubControl(L"check_time_send")); m_check_box_2 = dynamic_cast<ui::CheckBox*>(FindSubControl(L"check_time_send"));
@ -48,6 +67,11 @@ void WebsocketServerForm::Init()
m_btn_save_lua = dynamic_cast<ui::Button*>(FindSubControl(L"btn_save_lua")); m_btn_save_lua = dynamic_cast<ui::Button*>(FindSubControl(L"btn_save_lua"));
m_btn_close_form = dynamic_cast<ui::Button*>(FindSubControl(L"btn_close_uart")); m_btn_close_form = dynamic_cast<ui::Button*>(FindSubControl(L"btn_close_uart"));
if (nullptr != m_btn_close_form) {
m_btn_close_form->AttachClick([this](ui::EventArgs *ev) {
return true;
});
if (nullptr != m_btn_save_lua) if (nullptr != m_btn_save_lua)
m_btn_save_lua->AttachClick( m_btn_save_lua->AttachClick(
[this](ui::EventArgs* ev) { [this](ui::EventArgs* ev) {