51 lines
996 B
C++
51 lines
996 B
C++
#pragma once
|
|
|
|
#ifdef _WIN32
|
|
#include <windows.h>
|
|
#define socklen_t int
|
|
typedef unsigned int uint32_t;
|
|
#else
|
|
#include <arpa/inet.h>
|
|
#include <unistd.h>
|
|
# define closesocket close
|
|
#endif
|
|
|
|
#include <vector>
|
|
#include <cstring>
|
|
|
|
/**
|
|
* @brief UDP Handler
|
|
*/
|
|
class UDPHandler
|
|
{
|
|
public:
|
|
UDPHandler(unsigned short port = 9000);
|
|
virtual ~UDPHandler();
|
|
|
|
int CreateSocket();
|
|
void Close();
|
|
bool Bind();
|
|
|
|
int Send(const char *buf, int size, char *ip, unsigned short port);
|
|
int Recv(char *buf, int bufsize, sockaddr_in *from);
|
|
|
|
int SetRecvTimeout(int sec);
|
|
int SetSendTimeout(int sec);
|
|
|
|
private:
|
|
int usock = 0;
|
|
unsigned short uport = 0;
|
|
};
|
|
|
|
|
|
/**
|
|
* @brief Transform a Data Struct to UDP buffer
|
|
*
|
|
* @tparam DataStruct an IMUUnitree or ScanUnitree
|
|
* @param data
|
|
* @param buffer
|
|
* @param msgType
|
|
* @return uint32_t the total bytes sent through udp
|
|
*/
|
|
template <typename DataStruct>
|
|
uint32_t dataStructToUDPBuffer(const DataStruct &data, uint32_t msgType, char *buffer); |