no message

This commit is contained in:
zcy 2022-01-31 01:00:02 +08:00
parent ad524aab97
commit 2603a06533
9 changed files with 124 additions and 20 deletions

View File

@ -123,7 +123,5 @@ private:
std::map<std::string, lua_CFunction> mFunc;
};
#endif

View File

@ -39,8 +39,9 @@ int ThreadRun(TcpClientLibevent *p) {
#else
//todo linux版本sleep
#endif
}else {
ret = p->Dispatch();
}
ret = p->Dispatch();
}
}
return 0;
@ -53,9 +54,10 @@ void conn_readcb(struct bufferevent *bev, void *user_data)
size_t sz = evbuffer_get_length(input);
if (sz > 0)
{
uint8_t *msg = new uint8_t[sz];
uint8_t *msg = new uint8_t[sz + 1];
int ret = bufferevent_read(bev, msg, sz);
printf("%s\n", msg);
msg[sz] = '\0';
if(server->mObserver != nullptr){
server->mObserver->OnData(msg, ret);
}
@ -134,7 +136,6 @@ TcpClientLibevent::TcpClientLibevent(std::string addrinfo, int port, TcpClientLi
this->mObserver = p;
mByteRecv = 0;
mByteSend = 0;
}
int TcpClientLibevent::ConnectServer() {
@ -219,7 +220,6 @@ int TcpClientLibevent::Close() {
int TcpClientLibevent::SendDataAsync(const char* data, int len)
{
return bufferevent_write(this->mBev, data, len);
return 0;
}
uint64_t TcpClientLibevent::SocketFd()

View File

@ -0,0 +1,16 @@
require("string")
local file = io.open("writetest.txt", "w+")
function OnNewClient(ip,port)
showdata("on new client from lua " .. ip..port)
end
function OnClientRecvData(data,ip,port)
showdata("client recieve data from lua "..data.. ip..port)
end
function OnClientDisconnect(ip,port)
showdata("client leave from lua " .. ip..port)
end

View File

@ -10,6 +10,21 @@ TcpClientForm::TcpClientForm(ui::Window* hwnd,std::string url, uint32_t port, Tc
if (nullptr != hwnd) {
this->SetWindow(hwnd, nullptr, false);
}
mLua = new LuaDelegate;
mLuaFile.open("tcp_server.lua");
std::string lua_script;
if (mLuaFile.is_open()) {
std::string s;
while (getline(mLuaFile, s)) {
lua_script += s + "\r\n";
}
mLuaFile.close();
}
mLuaScript = lua_script;
mLua->DoString(lua_script);
std::cout << "lua script is " << lua_script << std::endl;
m_url = url;
m_port = port;
mLua = new LuaDelegate();
@ -36,6 +51,10 @@ void TcpClientForm::Init()
m_check_box_3 = dynamic_cast<ui::CheckBox*>(FindSubControl(L"check_hex_send"));
m_check_box_4 = dynamic_cast<ui::CheckBox*>(FindSubControl(L"check_hex_recv"));
m_rich_edit_2->SetRich(true);
m_rich_edit_2->SetReturnMsgWantCtrl(true);
m_rich_edit_2->SetText(string2wstring(mLuaScript));
wchar_t p[100] = { 0 };
wsprintf(p, L"華硊%s,傷諳瘍%d 帤蟀諉", string2wstring(m_url).c_str(),m_port);
@ -82,14 +101,14 @@ void TcpClientForm::OnDisConnected(std::string reason)
void TcpClientForm::OnData(uint8_t* dat, uint64_t len)
{
std::cout << (char*)dat << std::endl;
m_rich_edit_1->AppendText(string2wstring((char*)dat), false);
//std::cout << (char*)dat << "len is " << len << std::endl;
//m_rich_edit_1->AppendText(string2wstring(std::string((char*)dat)), false);
}
void TcpClientForm::OnClose()
{
m_rich_edit_1->AppendText(string2wstring("蟀諉眒冪剿羲\r\n"), false);
}

View File

@ -18,6 +18,8 @@
#include "lua_wraper.h"
#include "global.h"
#include <fstream>
#include <istream>
using namespace std;
class TcpClientForm :
@ -49,9 +51,9 @@ private:
ui::CheckBox* m_check_box_3;
ui::CheckBox* m_check_box_4;
TcpClientLibevent* mClient;
std::ifstream mLuaFile;
virtual void HandleMessage(ui::EventArgs& msg);
std::string mLuaScript;
std::string m_url;
int m_port;
bool m_connected;

View File

@ -0,0 +1,16 @@
require("string")
local file = io.open("writetest.txt", "w+")
function OnNewClient(ip,port)
showdata("on new client from lua " .. ip..port)
end
function OnClientRecvData(data,ip,port)
showdata("client recieve data from lua "..data.. ip..port)
end
function OnClientDisconnect(ip,port)
showdata("client leave from lua " .. ip..port)
end

View File

@ -1,7 +1,7 @@
#include "tcp_server_form.h"
#include "utils.h"
#include <functional>
#include "lua_bind.h"
extern "C" {
#include "event2/bufferevent.h"
@ -22,7 +22,7 @@ TcpServerFrom::TcpServerFrom(ui::Window* hwnd, string url,
mFlagSelectClient = true;
mLua = new LuaDelegate;
mLuaFile.open("script.lua");
mLuaFile.open("tcp_server.lua");
std::string lua_script;
if (mLuaFile.is_open()) {
std::string s;
@ -40,6 +40,7 @@ TcpServerFrom::TcpServerFrom(ui::Window* hwnd, string url,
TcpServerLibevent::OnDisconnect handler2 = std::bind(&TcpServerFrom::OnDisConnected,
this, std::placeholders::_1);
m_server->SetConnectionLeaveHandle(handler2);
this->mLua->BindFunction("showdata", LuaShowData);
}
@ -70,7 +71,45 @@ void TcpServerFrom::Init()
m_label_2 = dynamic_cast<ui::Label*>(FindSubControl(L"title"));
m_combo_1 = dynamic_cast<ui::Combo*>(FindSubControl(L"clients"));
m_button_3 = dynamic_cast<ui::Button*>(FindSubControl(L"btn_do_lua"));
m_btn_save_lua = dynamic_cast<ui::Button*>(FindSubControl(L"btn_save_lua"));
if (nullptr != m_button_1) {
m_button_1->AttachClick([this](ui::EventArgs* ev) {
auto client = m_combo_1->GetText();
if (client != L"全部连接") {
int clii = atoi(wstring2string(client).c_str());
if (nullptr != this->mClients[clii]) {
std::wstring send = m_rich_edit_3->GetText();
this->mClients[clii]->WriteData(wstring2string(send).c_str(),
wstring2string(send).size());
}
}
else {
if ((nullptr != m_rich_edit_3)) {
std::wstring send = m_rich_edit_3->GetText();
for (auto itr = this->mClients.begin(); itr != this->mClients.end(); itr++) {
itr->second->WriteData(wstring2string(send).c_str(),
wstring2string(send).size());
}
}
}
return true;
});
}
m_btn_save_lua->AttachClick([this](ui::EventArgs* ev) {
std::cout << "保存lua脚本\r\n";
std::string lua = wstring2string(mEditLua->GetText());
if (0 == this->mLua->UpdateScript(lua)) {
this->mLuaScript = lua;
}
else {
MessageBox(0, L"lua脚本错误", L"", 0);
return true;
}
std::cout << lua.c_str() << "\r\n";
return true;
});
m_button_3->AttachClick([this](ui::EventArgs*ev) {
std::cout <<"m_button_3 " << wstring2string(this->m_combo_1->GetText())<<std::endl;
@ -96,7 +135,10 @@ void TcpServerFrom::OnNewConnAccept(ConnectionLibevent* p)
{
std::cout << "TcpServerFrom OnNewConnAccept addr " << p->IpAddress() << p->SocketFd() << std::endl;
updateStatus();
int ret = mLua->CallFuntion < std::string, LUA_INTEGER >("OnNewClient",p->IpAddress(),p->SocketFd());
if (ret < 0) {
std::cout << "call funtion error" << ret<<"std::endl";
}
auto element = new ui::ListContainerElement;
element->SetClass(L"listitem");
element->SetFixedHeight(30);
@ -106,11 +148,15 @@ void TcpServerFrom::OnNewConnAccept(ConnectionLibevent* p)
mClients[p->SocketFd()] = p;
m_combo_1->Add(element);
p->SetRecvHandler(
[this](char* p, uint32_t len) {
std::cout << "SetRecvHandler " << p;
[this,p](char* recv, uint32_t len) {
std::cout << "RecvHandler "<<p->IpAddress()<<p->SocketFd() <<" " << recv;
int ret = this->mLua->CallFuntion <std::string,std::string,LUA_INTEGER >
("OnClientRecvData", std::string(recv),p->IpAddress(), p->SocketFd());
if (ret < 0) {
MessageBox(0, L"lua脚本错误 OnClientRecvData", L"", 0);
}
}
);
return;
}
@ -119,6 +165,11 @@ void TcpServerFrom::OnDisConnected(ConnectionLibevent* cli)
std::cout << "TcpServerFrom Disconnected" << cli->IpAddress() << " fd " << cli->SocketFd() << std::endl;
updateStatus();
mClients.erase(cli->SocketFd());
int ret = this->mLua->CallFuntion <std::string, LUA_INTEGER >
("OnClientDisconnect", cli->IpAddress(), cli->SocketFd());
if (ret < 0) {
MessageBox(0, L"lua脚本错误 OnClientRecvData", L"", 0);
}
}
LuaDelegate* TcpServerFrom::LuaVM()
@ -132,7 +183,7 @@ void TcpServerFrom::ShowDataInEdit(const char* value)
std::cout << "nullp pointer in ShowDataInEdit" << std::endl;
return;
}
m_rich_edit_1->AppendText(string2wstring(std::string(value)));
}
void TcpServerFrom::updateStatus()

View File

@ -22,7 +22,7 @@ public:
void OnNewConnAccept(ConnectionLibevent*);
void OnDisConnected(ConnectionLibevent*);
LuaDelegate* LuaVM();
std::map<uint32_t, ConnectionLibevent*> mClients;
protected:
void ShowDataInEdit(const char*) override;
@ -43,11 +43,11 @@ private:
ui::CheckBox* m_check_box_3;
ui::CheckBox* m_check_box_4;
ui::Button* m_button_2;
ui::Button* m_btn_save_lua;
ui::Label* m_label_2;
ui::Combo* m_combo_1;
ui::Button* m_button_3;
std::ifstream mLuaFile;
std::map<uint32_t, ConnectionLibevent*> mClients;
bool mFlagSelectClient;
LuaDelegate *mLua;
std::string mLuaScript;

View File

@ -26,6 +26,8 @@
<Button class="btn_global_blue_80x30" name="btn_close_uart" width="100" text="关闭" bkcolor="lightcolor" margin="25,3,5,3" />
<Label name="title" text="客户端:" width="60" valign="bottom" margin="0,0,0,0" height="30" font="arial_14"/>
<Combo class="list" name="clients" width="100" height="30" bkimage="file='../public/combo/normal.png' corner='5,5,30,5'"/>
<Button class="btn_global_blue_80x30" name="btn_save_lua" width="100" text="保存lua脚本" bkcolor="lightcolor" margin="25,3,5,3" />
</HBox>
<HBox height="40">
<Button class="btn_global_blue_80x30" name="btn_do_lua" width="100" text="执行" bkcolor="lightcolor" margin="25,3,5,3" />