10 changed files with 217 additions and 7 deletions
-
3.vscode/settings.json
-
6CMakeLists.txt
-
2libxsync
-
33mainwindow.cpp
-
27mainwindow.h
-
3src/main.cpp
-
77src/xsync_udp_factory_impl.cpp
-
26src/xsync_udp_factory_impl.hpp
-
12src/zqthread.cpp
-
33src/zqthread.hpp
@ -1 +1 @@ |
|||||
Subproject commit 362cd3a9013bfbee034a508bd7b36f819ce28ced |
|
||||
|
Subproject commit 5e99b7c334eae1657ea128754db0d5cd04849c7d |
@ -0,0 +1,77 @@ |
|||||
|
#include "xsync_udp_factory_impl.hpp"
|
||||
|
|
||||
|
#include <winsock2.h>
|
||||
|
//
|
||||
|
#include <Windows.h>
|
||||
|
#pragma comment(lib, "ws2_32")
|
||||
|
using namespace iflytop; |
||||
|
class XSUDP : public I_XSUDP { |
||||
|
uint32_t m_ip; |
||||
|
int m_localport; |
||||
|
|
||||
|
struct sockaddr_in localadd = {}; |
||||
|
int m_sock_fd = 0; |
||||
|
|
||||
|
public: |
||||
|
virtual xs_error_code_t initialize(string ip, int localport) override; |
||||
|
virtual xs_error_code_t sendto(const XsyncNetAdd& to, const char* data, int32_t length) override; |
||||
|
virtual xs_error_code_t receive(const char* data, int32_t length, XsyncNetAdd& from, int overtimems) override; |
||||
|
}; |
||||
|
|
||||
|
xs_error_code_t XSUDP::initialize(string ip, int localport) { |
||||
|
localadd.sin_family = AF_INET; |
||||
|
localadd.sin_addr.s_addr = inet_addr(ip.c_str()); |
||||
|
localadd.sin_port = htons(localport); |
||||
|
|
||||
|
// 创建客户端用于通信的Socket
|
||||
|
m_sock_fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); |
||||
|
if (m_sock_fd < 0) return kxs_ec_socket_fail; |
||||
|
|
||||
|
int ret = bind(m_sock_fd, (struct sockaddr*)&localadd, sizeof(localadd)); |
||||
|
if (ret < 0) return kxs_ec_bind_fail; |
||||
|
return kxs_ec_success; |
||||
|
} |
||||
|
|
||||
|
xs_error_code_t XSUDP::sendto(const XsyncNetAdd& to, const char* data, int32_t length) { |
||||
|
struct sockaddr_in sockaddr; |
||||
|
sockaddr.sin_family = AF_INET; |
||||
|
sockaddr.sin_addr.s_addr = htonl(to.ip); |
||||
|
sockaddr.sin_port = htons(to.port); |
||||
|
int ret = ::sendto(m_sock_fd, data, length, 0, (struct sockaddr*)&sockaddr, sizeof(sockaddr)); |
||||
|
if (ret != length) return kxs_ec_send_fail; |
||||
|
return kxs_ec_success; |
||||
|
} |
||||
|
xs_error_code_t XSUDP::receive(const char* data, int32_t length, XsyncNetAdd& from, int overtimems) { |
||||
|
struct sockaddr_in sockaddr; |
||||
|
|
||||
|
timeval timeout; |
||||
|
timeout.tv_sec = overtimems; |
||||
|
timeout.tv_usec = 0; |
||||
|
if (setsockopt(m_sock_fd, SOL_SOCKET, SO_RCVTIMEO, (const char*)&timeout, sizeof(timeout)) == -1) { |
||||
|
return kxs_ec_setsockopt_rx_timeout_fail; |
||||
|
} |
||||
|
|
||||
|
sockaddr.sin_family = AF_INET; |
||||
|
sockaddr.sin_addr.s_addr = htonl(from.ip); |
||||
|
sockaddr.sin_port = htons(from.port); |
||||
|
int senderAddressLen = sizeof(sockaddr); |
||||
|
int ret = ::recvfrom(m_sock_fd, (char*)data, length, 0, (struct sockaddr*)&sockaddr, &senderAddressLen); |
||||
|
if (ret != length) return kxs_ec_receive_fail; |
||||
|
return kxs_ec_success; |
||||
|
} |
||||
|
|
||||
|
/*******************************************************************************
|
||||
|
* xSyncUdpFactoryImpl * |
||||
|
*******************************************************************************/ |
||||
|
|
||||
|
void XSyncUdpFactoryImpl::initialize() { |
||||
|
static bool isInit = false; |
||||
|
if (!isInit) { |
||||
|
WSADATA wsaData; |
||||
|
WSAStartup(MAKEWORD(2, 2), &wsaData); |
||||
|
isInit = true; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
shared_ptr<I_XSUDPListener> XSyncUdpFactoryImpl::createXSUDPListener() { return nullptr; } |
||||
|
shared_ptr<I_XSUDP> XSyncUdpFactoryImpl::createXSUDP() { return make_shared<XSUDP>(); } |
@ -0,0 +1,26 @@ |
|||||
|
#pragma once
|
||||
|
#include <fstream>
|
||||
|
#include <functional>
|
||||
|
#include <iostream>
|
||||
|
#include <list>
|
||||
|
#include <map>
|
||||
|
#include <memory>
|
||||
|
#include <set>
|
||||
|
#include <sstream>
|
||||
|
#include <string>
|
||||
|
#include <vector>
|
||||
|
|
||||
|
#include "libxsync\xsync.hpp"
|
||||
|
namespace iflytop { |
||||
|
using namespace std; |
||||
|
|
||||
|
class XSyncUdpFactoryImpl : public I_XSyncUDPFactory { |
||||
|
private: |
||||
|
/* data */ |
||||
|
public: |
||||
|
void initialize(); |
||||
|
virtual shared_ptr<I_XSUDPListener> createXSUDPListener() override; |
||||
|
virtual shared_ptr<I_XSUDP> createXSUDP() override; |
||||
|
}; |
||||
|
|
||||
|
} // namespace iflytop
|
@ -0,0 +1,12 @@ |
|||||
|
#include "zqthread.hpp"
|
||||
|
using namespace iflytop; |
||||
|
using namespace std; |
||||
|
|
||||
|
ZQThread::ZQThread(const char* name, function<void()> cb) { |
||||
|
name_ = QString(name); |
||||
|
cb_ = cb; |
||||
|
} |
||||
|
|
||||
|
void ZQThread::run() { |
||||
|
if (cb_) cb_(); |
||||
|
} |
@ -0,0 +1,33 @@ |
|||||
|
#pragma once
|
||||
|
#include <fstream>
|
||||
|
#include <functional>
|
||||
|
#include <iostream>
|
||||
|
#include <list>
|
||||
|
#include <map>
|
||||
|
#include <memory>
|
||||
|
#include <set>
|
||||
|
#include <sstream>
|
||||
|
#include <string>
|
||||
|
#include <vector>
|
||||
|
|
||||
|
//
|
||||
|
#include <QString>
|
||||
|
#include <QThread>
|
||||
|
|
||||
|
namespace iflytop { |
||||
|
using namespace std; |
||||
|
|
||||
|
class ZQThread : public QThread { |
||||
|
Q_OBJECT |
||||
|
private: |
||||
|
QString name_; |
||||
|
function<void()> cb_; |
||||
|
|
||||
|
public: |
||||
|
ZQThread(const char* name, function<void()> cb); |
||||
|
|
||||
|
protected: |
||||
|
virtual void run() override; |
||||
|
}; |
||||
|
|
||||
|
} // namespace iflytop
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue