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,23 +253,24 @@ LRESULT BasicForm::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
if (ui::EventType::kEventSelect == ev->Type) {
wprintf(L"%s\r\n", dynamic_cast<ui::TreeNode*> (ev->pSender)->GetText().c_str());
printf("GetCurSel %d\r\n", mRightSide->GetCurSel());
}
WebsocketClientForm* p = mWebsocketClientForm[dynamic_cast<ui::TreeNode*> (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;
WebsocketClientForm* p = mWebsocketClientForm[dynamic_cast<ui::TreeNode*> (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;
@ -282,14 +283,14 @@ LRESULT BasicForm::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
ui::TreeNode* node = new ui::TreeNode;
mMonitor->GetRootNode()->GetChildNode(6)->AddChildNode(node);
auto key = info->ip;
auto key = info->ip + std::to_wstring(info->port);
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);
auto form = new WebsocketServerForm(this, wstring2string(key), server);
form->SetChildLayoutXML(L"basic/tcp_server_form.xml");
form->SetName(key);
@ -303,24 +304,25 @@ LRESULT BasicForm::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
if (ui::EventType::kEventSelect == ev->Type) {
wprintf(L"%s\r\n", dynamic_cast<ui::TreeNode*> (ev->pSender)->GetText().c_str());
printf("GetCurSel %d\r\n", mRightSide->GetCurSel());
}
WebsocketServerForm* p = mWebsocketServerForm[dynamic_cast<ui::TreeNode*>
(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;
WebsocketServerForm* p = mWebsocketServerForm[dynamic_cast<ui::TreeNode*>
(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;
@ -650,6 +652,11 @@ LuaBindInterface* BasicForm::FindCurrentFormByLuaPointer(lua_State* pointer)
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;
}

View File

@ -10,7 +10,11 @@ void on_new_connection(WebsocketServer* s, websocketpp::connection_hdl hdl){
auto host = con->get_host();
auto uri = con->get_uri();
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);
auto socket = con->get_raw_socket().native_handle();
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
@ -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()
<< " and message: " << msg->get_payload()
<< 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
// 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){
m_port = port;
m_url = server;
m_server = new WsServer;
m_thread = new std::thread([this](){
// Set logging settings
@ -97,3 +129,21 @@ int WebsocketServer::SendDataAllClient(const char* dat,int len,
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 {
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);
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_connection_close(WebsocketServer* s, websocketpp::connection_hdl hdl);
int SendData(uint32_t,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:
std::string m_url; // 地址
uint32_t m_port; // url
WsServer *m_server;
std::thread *m_thread;
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;
};

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"
WebsocketServerForm::WebsocketServerForm(ui::Window* hwnd, string url, WebsocketServer* server)
WebsocketServerForm::WebsocketServerForm(ui::Window* hwnd, string url,
WebsocketServer* server)
{
if (nullptr != hwnd) {
this->SetWindow(hwnd, nullptr, false);
}
m_server = server;
if (nullptr != server) {
}
mLua = new LuaDelegate;
mLuaFile.open(WEBSOCKET_SERVER_LUA);
@ -31,6 +29,7 @@ WebsocketServerForm::WebsocketServerForm(ui::Window* hwnd, string url, Websocket
void WebsocketServerForm::Init()
{
ui::ChildBox::Init();
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_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_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_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"));
@ -48,6 +67,11 @@ void WebsocketServerForm::Init()
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"));
if (nullptr != m_btn_close_form) {
m_btn_close_form->AttachClick([this](ui::EventArgs *ev) {
return true;
});
if (nullptr != m_btn_save_lua)
m_btn_save_lua->AttachClick(
[this](ui::EventArgs* ev) {