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) {
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
};
|
||||
|
||||
|
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"
|
||||
|
||||
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) {
|
||||
|
Loading…
Reference in New Issue
Block a user