完成udp功能

This commit is contained in:
zcy 2022-02-11 14:26:25 +08:00
parent da3b7c0fc5
commit 4af890188a
4 changed files with 21 additions and 14 deletions

View File

@ -25,16 +25,19 @@ UdpForm::UdpForm(ui::Window* hwnd, string url, uint32_t port, UdpDataGramLibeven
mLuaScript = lua_script; mLuaScript = lua_script;
mLua->DoString(lua_script); mLua->DoString(lua_script);
UdpDataGramLibevent::OnReadDataHandle onRecvCallBack([this](const char* dat, int len, struct sockaddr_in sendarr){ UdpDataGramLibevent::OnReadDataHandle onRecvCallBack
//this->LuaVM()->CallFuntion(); = [this](const char* dat, int len, struct sockaddr_in sendarr){
std::cout << "receive udp datagram len" << len << dat << "\r\n";
this->mLua->CallFuntion<std::string,std::string, LUA_INTEGER>("OnUdpData", std::string(dat), this->mLua->CallFuntion<std::string,std::string, LUA_INTEGER>("OnUdpData", std::string(dat),
inet_ntoa(sendarr.sin_addr),sendarr.sin_port); inet_ntoa(sendarr.sin_addr),sendarr.sin_port);
});
};
if (mUdpPeer != nullptr) { if (mUdpPeer != nullptr) {
mUdpPeer->SetOnReadHandle(&onRecvCallBack); std::cout << "\r\n"<< &onRecvCallBack <<"\r\n";
mUdpPeer->SetOnReadHandle(onRecvCallBack);
} }
this->mLua->BindFunction("showdata", LuaShowData); this->mLua->BindFunction("showdata", LuaShowData);
std::cout << "lua script is " << lua_script << std::endl; std::cout << "lua script is " << lua_script << std::endl;
} }
@ -129,9 +132,10 @@ LuaDelegate* UdpForm::LuaVM()
return mLua; return mLua;
} }
void UdpForm::ShowDataInEdit(const char*) void UdpForm::ShowDataInEdit(const char*src)
{ {
std::cout << src << " from ShowDataInEdit";
this->m_rich_edit_1->AppendText(string2wstring(std::string(src)));
} }
void UdpForm::HandleMessage(ui::EventArgs& msg) void UdpForm::HandleMessage(ui::EventArgs& msg)

View File

@ -23,7 +23,8 @@
#include <istream> #include <istream>
class UdpForm : class UdpForm :
public ui::ChildBox public ui::ChildBox,
LuaBindInterface
{ {
public: public:

View File

@ -39,7 +39,9 @@ void read_cb(evutil_socket_t fd, short event, void* arg) {
printf("recv[%s:%d]\n", buf, len); printf("recv[%s:%d]\n", buf, len);
// sendto(fd, buf, len, 0, (struct sockaddr*)&cli_addr, addr_len); // sendto(fd, buf, len, 0, (struct sockaddr*)&cli_addr, addr_len);
if (parent->OnReadHandle() != nullptr) { if (parent->OnReadHandle() != nullptr) {
(*parent->OnReadHandle())(buf, len, cli_addr); UdpDataGramLibevent::OnReadDataHandle p = (parent->OnReadHandle());
if(p)
p(buf, len, cli_addr);
} }
} }
} }
@ -82,11 +84,11 @@ int UdpDataGramLibevent::bind_socket(struct event* ev, const char* ip, uint16_t
return 0; return 0;
} }
UdpDataGramLibevent::OnReadDataHandle* UdpDataGramLibevent::OnReadHandle() { UdpDataGramLibevent::OnReadDataHandle UdpDataGramLibevent::OnReadHandle() {
return this->mOnRead; return this->mOnRead;
} }
void UdpDataGramLibevent::SetOnReadHandle(UdpDataGramLibevent::OnReadDataHandle* p) { void UdpDataGramLibevent::SetOnReadHandle(UdpDataGramLibevent::OnReadDataHandle p) {
this->mOnRead = p; this->mOnRead = p;
} }

View File

@ -26,14 +26,14 @@ class UdpDataGramLibevent {
public: public:
typedef std::function<void(const char* dat, int len, struct sockaddr_in)> OnReadDataHandle; typedef std::function<void(const char* dat, int len, struct sockaddr_in)> OnReadDataHandle;
UdpDataGramLibevent(std::string ip, uint32_t port); UdpDataGramLibevent(std::string ip, uint32_t port);
OnReadDataHandle* OnReadHandle(); OnReadDataHandle OnReadHandle();
typedef enum { typedef enum {
RUNNING, RUNNING,
STOP, STOP,
FAIL FAIL
}STATUS; }STATUS;
friend void read_cb(int, short, void*); friend void read_cb(int, short, void*);
void SetOnReadHandle(OnReadDataHandle*); void SetOnReadHandle(OnReadDataHandle);
void SendTo(const char* dat, uint32_t len, std::string ip, int port); void SendTo(const char* dat, uint32_t len, std::string ip, int port);
int SocketFD(); int SocketFD();
private: private:
@ -47,7 +47,7 @@ private:
STATUS m_status; // STATUS m_status; //
std::thread* m_thread; // 当前线程 std::thread* m_thread; // 当前线程
intptr_t mSocketFD; // 操作系统原生socket intptr_t mSocketFD; // 操作系统原生socket
OnReadDataHandle* mOnRead; OnReadDataHandle mOnRead;
}; };