UdpClientImpl.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #ifndef NETWORK_UDPCLIENTIMPL_H
  2. #define NETWORK_UDPCLIENTIMPL_H
  3. #include <functional>
  4. #include <string>
  5. #include <thread>
  6. #include <vector>
  7. #include "asio.h"
  8. namespace Network {
  9. class UdpClientImpl
  10. {
  11. public:
  12. UdpClientImpl(const std::string& listenAddress, const std::string& targetAddress, int targetPort, std::function<void(const std::string&)> callback);
  13. ~UdpClientImpl();
  14. public:
  15. void Receive();
  16. std::string Send(const std::string& data, int sourcePort = 0);
  17. void Broadcast(const std::string& data, int sourcePort = 0);
  18. protected:
  19. void EnableMulticast();
  20. private:
  21. void CheckDeadline();
  22. void HandleAnswer(const asio::error_code& error, size_t bytes, asio::error_code* out_error, std::size_t* out_length) const;
  23. void ReceiveSocket();
  24. void HandleReceiveSocket(const asio::error_code& error, size_t bytes);
  25. private:
  26. std::thread m_thread;
  27. std::string m_url;
  28. int m_bufferLength;
  29. asio::io_service m_ioService;
  30. asio::io_service m_ioServiceAnswer;
  31. asio::system_timer m_deadline;
  32. asio::ip::address m_listenAddress;
  33. asio::ip::address m_targetAddress;
  34. int m_targetPort;
  35. asio::ip::udp::socket m_receiveSocket;
  36. asio::ip::udp::socket m_answerSocket;
  37. asio::ip::udp::endpoint m_targetEndpoint;
  38. asio::ip::udp::endpoint m_sourceEndpoint;
  39. std::vector<char> m_socketReceiveData;
  40. std::vector<char> m_socketAnswerData;
  41. std::function<void(const std::string&)> m_callback;
  42. };
  43. } // namespace Network
  44. #endif // NETWORK_UDPCLIENTIMPL_H