no message
This commit is contained in:
parent
d547b64721
commit
021f1653b7
@ -253,23 +253,24 @@ 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());
|
||||||
p->SetAutoDestroy(true);
|
p->SetAutoDestroy(true);
|
||||||
if (mRightShow != nullptr) {
|
if (mRightShow != nullptr) {
|
||||||
mRightShow->SetVisible(false);
|
mRightShow->SetVisible(false);
|
||||||
p->SetVisible(true);
|
p->SetVisible(true);
|
||||||
mRightShow = p;
|
mRightShow = p;
|
||||||
wprintf(L"%s", p->GetName());
|
wprintf(L"%s", p->GetName());
|
||||||
mRightSide->SelectItem(p->GetName());
|
mRightSide->SelectItem(p->GetName());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
wprintf(L"%s", p->GetName());
|
wprintf(L"%s", p->GetName());
|
||||||
p->SetVisible(true);
|
p->SetVisible(true);
|
||||||
mRightSide->SelectItem(p->GetName());
|
mRightSide->SelectItem(p->GetName());
|
||||||
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,24 +304,25 @@ 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) {
|
||||||
printf("GetCurSel %d\r\n", mRightSide->GetCurSel());
|
printf("GetCurSel %d\r\n", mRightSide->GetCurSel());
|
||||||
p->SetAutoDestroy(true);
|
p->SetAutoDestroy(true);
|
||||||
if (mRightShow != nullptr) {
|
if (mRightShow != nullptr) {
|
||||||
mRightShow->SetVisible(false);
|
mRightShow->SetVisible(false);
|
||||||
p->SetVisible(true);
|
p->SetVisible(true);
|
||||||
mRightShow = p;
|
mRightShow = p;
|
||||||
wprintf(L"%s", p->GetName());
|
wprintf(L"%s", p->GetName());
|
||||||
mRightSide->SelectItem(p->GetName());
|
mRightSide->SelectItem(p->GetName());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
wprintf(L"%s", p->GetName());
|
wprintf(L"%s", p->GetName());
|
||||||
p->SetVisible(true);
|
p->SetVisible(true);
|
||||||
mRightSide->SelectItem(p->GetName());
|
mRightSide->SelectItem(p->GetName());
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
1
examples/proto_debuger/websocket_server.lua
Normal file
1
examples/proto_debuger/websocket_server.lua
Normal 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
|
@ -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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user