| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- #ifndef NETWORK_UDPCLIENTIMPL_H
- #define NETWORK_UDPCLIENTIMPL_H
- #include <functional>
- #include <string>
- #include <thread>
- #include <vector>
- #include "asio.h"
- namespace Network {
- class UdpClientImpl
- {
- public:
- UdpClientImpl(const std::string& listenAddress, const std::string& targetAddress, int targetPort, std::function<void(const std::string&)> callback);
- ~UdpClientImpl();
- public:
- void Receive();
- std::string Send(const std::string& data, int sourcePort = 0);
- void Broadcast(const std::string& data, int sourcePort = 0);
- protected:
- void EnableMulticast();
- private:
- void CheckDeadline();
- void HandleAnswer(const asio::error_code& error, size_t bytes, asio::error_code* out_error, std::size_t* out_length) const;
- void ReceiveSocket();
- void HandleReceiveSocket(const asio::error_code& error, size_t bytes);
- private:
- std::thread m_thread;
- std::string m_url;
- int m_bufferLength;
- asio::io_service m_ioService;
- asio::io_service m_ioServiceAnswer;
- asio::system_timer m_deadline;
- asio::ip::address m_listenAddress;
- asio::ip::address m_targetAddress;
- int m_targetPort;
- asio::ip::udp::socket m_receiveSocket;
- asio::ip::udp::socket m_answerSocket;
- asio::ip::udp::endpoint m_targetEndpoint;
- asio::ip::udp::endpoint m_sourceEndpoint;
- std::vector<char> m_socketReceiveData;
- std::vector<char> m_socketAnswerData;
- std::function<void(const std::string&)> m_callback;
- };
- } // namespace Network
- #endif // NETWORK_UDPCLIENTIMPL_H
|