86 lines
1.3 KiB
C
86 lines
1.3 KiB
C
|
|
#pragma once
|
|||
|
|
#include "IYUDPServer.h"
|
|||
|
|
#include <cstdio>
|
|||
|
|
|
|||
|
|
#ifndef _WIN32
|
|||
|
|
#include <sys/socket.h>
|
|||
|
|
#include <netinet/in.h>
|
|||
|
|
#include <sys/types.h>
|
|||
|
|
#include <sys/types.h>
|
|||
|
|
#include <sys/socket.h>
|
|||
|
|
#include <unistd.h>
|
|||
|
|
#define SOCKET int
|
|||
|
|
#define INVALID_SOCKET -1
|
|||
|
|
#else
|
|||
|
|
#include <WS2tcpip.h>
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
class CYUDPServer : public IYUDPServer
|
|||
|
|
{
|
|||
|
|
public:
|
|||
|
|
CYUDPServer();
|
|||
|
|
~CYUDPServer() = default;
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @brief Init
|
|||
|
|
* @return
|
|||
|
|
*/
|
|||
|
|
virtual int Init(const int nPort) override;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>UDP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @brief StartUDPServer
|
|||
|
|
* @return
|
|||
|
|
*/
|
|||
|
|
virtual int StartUDPServer(UdpRecvDataFunc pRecvDataFunc, bool bRecvSelfProtocol) override;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UDP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @brief StopUDPServer
|
|||
|
|
* @return
|
|||
|
|
*/
|
|||
|
|
virtual int StopUDPServer() override;
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @brief SendData
|
|||
|
|
* @param pData
|
|||
|
|
* @param nLen
|
|||
|
|
* @return
|
|||
|
|
*/
|
|||
|
|
virtual int SendData(const sockaddr_in clientPeer, const char* pData, const int nLen) override;
|
|||
|
|
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
/**
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @brief _UdpRecvData
|
|||
|
|
* @param pThis
|
|||
|
|
*/
|
|||
|
|
static void _UdpRecvData(CYUDPServer* pThis);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @brief _UdpRecvTask
|
|||
|
|
*/
|
|||
|
|
void _UdpRecvTask();
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* <EFBFBD>ر<EFBFBD>ͨ<EFBFBD><EFBFBD>
|
|||
|
|
* @brief _CloseSocket
|
|||
|
|
*/
|
|||
|
|
void _CloseSocket();
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
|
|||
|
|
SOCKET m_socketfd;
|
|||
|
|
bool m_bRecv;
|
|||
|
|
bool m_bRecvRuning;
|
|||
|
|
UdpRecvDataFunc m_funcRecvCallback;
|
|||
|
|
|
|||
|
|
};
|