完成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;
mLua->DoString(lua_script);
UdpDataGramLibevent::OnReadDataHandle onRecvCallBack([this](const char* dat, int len, struct sockaddr_in sendarr){
//this->LuaVM()->CallFuntion();
UdpDataGramLibevent::OnReadDataHandle onRecvCallBack
= [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),
inet_ntoa(sendarr.sin_addr),sendarr.sin_port);
});
};
if (mUdpPeer != nullptr) {
mUdpPeer->SetOnReadHandle(&onRecvCallBack);
std::cout << "\r\n"<< &onRecvCallBack <<"\r\n";
mUdpPeer->SetOnReadHandle(onRecvCallBack);
}
this->mLua->BindFunction("showdata", LuaShowData);
std::cout << "lua script is " << lua_script << std::endl;
}
@ -129,9 +132,10 @@ LuaDelegate* UdpForm::LuaVM()
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)

View File

@ -23,7 +23,8 @@
#include <istream>
class UdpForm :
public ui::ChildBox
public ui::ChildBox,
LuaBindInterface
{
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);
// sendto(fd, buf, len, 0, (struct sockaddr*)&cli_addr, addr_len);
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;
}
UdpDataGramLibevent::OnReadDataHandle* UdpDataGramLibevent::OnReadHandle() {
UdpDataGramLibevent::OnReadDataHandle UdpDataGramLibevent::OnReadHandle() {
return this->mOnRead;
}
void UdpDataGramLibevent::SetOnReadHandle(UdpDataGramLibevent::OnReadDataHandle* p) {
void UdpDataGramLibevent::SetOnReadHandle(UdpDataGramLibevent::OnReadDataHandle p) {
this->mOnRead = p;
}

View File

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