My Project
UdpCommunication.hpp
1 /*
2 ** EPITECH PROJECT, 2022
3 ** B-CPP-500-PAR-5-1-rtype-martin.vanaud
4 ** File description:
5 ** UdpCommunication
6 */
7 
8 #ifndef UDPCOMMUNICATION_HPP_
9  #define UDPCOMMUNICATION_HPP_
10 
11  #include "IUdpCommunication.hpp"
12 
17  public:
21  UdpCommunication() = default;
26  _socket.close();
27  };
28 
35  UdpCommunication(asio::io_context &context, asio::ip::port_type const &port) : _context(context),
36  _socket(_context, asio::ip::udp::endpoint(asio::ip::udp::v4(), port)) {};
37 
46  UdpCommunication(asio::io_context &context, asio::ip::port_type const &port, std::string const &connectionPort, std::string const &ip) : _context(context),
47  _socket(_context, asio::ip::udp::endpoint(asio::ip::udp::v4(), port)) {
48  asio::ip::udp::resolver resolver(context);
49  asio::ip::udp::resolver::query query(asio::ip::udp::v4(), ip, connectionPort);
50  asio::ip::udp::resolver::iterator iter = resolver.resolve(query);
51  _endpoint = *iter;
52  };
53 
59  void send(std::vector<byte> const &data) override {
60  _socket.send_to(asio::buffer(data.data(), data.size()), _endpoint);
61  };
62 
70  void send(std::vector<byte> const &data, asio::ip::address const &address, unsigned short const &port) override {
71  setEnpointInfo(address, port);
72  _socket.send_to(asio::buffer(data.data(), data.size()), _endpoint);
73  };
74 
81  void async_send(std::vector<byte> const &data, std::function<void(std::error_code const &, std::size_t)> callBack) override {
82  _socket.async_send_to(asio::buffer(data.data(), data.size()), _endpoint, callBack);
83  };
84 
93  void async_send(std::vector<byte> const &data, std::function<void(std::error_code const &, std::size_t)> callBack, asio::ip::address const &address, unsigned short const &port) override {
94  setEnpointInfo(address, port);
95  _socket.async_send_to(asio::buffer(data.data(), data.size()), _endpoint, callBack);
96  };
97 
104  std::pair<asio::ip::address, unsigned short> receive(std::vector<byte> &data) override {
105  data.clear();
106  data.resize(1500);
107  _socket.receive_from(asio::buffer(data.data(), 1500), _endpoint);
108  return getEnpointInfo();
109  };
110 
117  void async_receive(std::vector<byte> &data, std::function<void(std::error_code const &, std::size_t)> callBack) override {
118  data.clear();
119  data.resize(1500);
120  _socket.async_receive_from(asio::buffer(data.data(), 1500), _endpoint, callBack);
121  };
122 
128  std::pair<asio::ip::address, unsigned short> getEnpointInfo() const override {
129  return std::make_pair<asio::ip::address, unsigned short>(_endpoint.address(), _endpoint.port());
130  }
131 
137  void setEnpointInfo(std::pair<asio::ip::address, unsigned short> const &endpointInfo) override {
138  _endpoint.address(endpointInfo.first);
139  _endpoint.port(endpointInfo.second);
140  }
141 
148  void setEnpointInfo(asio::ip::address const &address, unsigned short const &port) override {
149  _endpoint.address(address);
150  _endpoint.port(port);
151  }
152 
153  protected:
154  private:
155  asio::io_context &_context;
156  asio::ip::udp::socket _socket;
157  asio::ip::udp::endpoint _endpoint;
158 };
159 
160 
161 #endif /* !UDPCOMMUNICATION_HPP_ */
UdpCommunication::async_send
void async_send(std::vector< byte > const &data, std::function< void(std::error_code const &, std::size_t)> callBack) override
A method to send a message to an already known ip adress and port adress in an async way.
Definition: UdpCommunication.hpp:81
UdpCommunication::send
void send(std::vector< byte > const &data, asio::ip::address const &address, unsigned short const &port) override
A method to send a message to an ip adress and port adress.
Definition: UdpCommunication.hpp:70
UdpCommunication::UdpCommunication
UdpCommunication(asio::io_context &context, asio::ip::port_type const &port)
Construct a new Udp Communication object.
Definition: UdpCommunication.hpp:35
UdpCommunication::receive
std::pair< asio::ip::address, unsigned short > receive(std::vector< byte > &data) override
A method to receive a message.
Definition: UdpCommunication.hpp:104
UdpCommunication::setEnpointInfo
void setEnpointInfo(asio::ip::address const &address, unsigned short const &port) override
Set the Enpoint Info object.
Definition: UdpCommunication.hpp:148
UdpCommunication::async_send
void async_send(std::vector< byte > const &data, std::function< void(std::error_code const &, std::size_t)> callBack, asio::ip::address const &address, unsigned short const &port) override
A method to send a message to a ip adress and port adress in an async way.
Definition: UdpCommunication.hpp:93
UdpCommunication::getEnpointInfo
std::pair< asio::ip::address, unsigned short > getEnpointInfo() const override
Get the Enpoint Info object.
Definition: UdpCommunication.hpp:128
UdpCommunication::~UdpCommunication
~UdpCommunication()
Destroy the Udp Communication object.
Definition: UdpCommunication.hpp:25
UdpCommunication
Class that handle Udp Communication.
Definition: UdpCommunication.hpp:16
UdpCommunication::UdpCommunication
UdpCommunication(asio::io_context &context, asio::ip::port_type const &port, std::string const &connectionPort, std::string const &ip)
Construct a new Udp Communication object.
Definition: UdpCommunication.hpp:46
UdpCommunication::UdpCommunication
UdpCommunication()=default
Construct a new Udp Communication object.
UdpCommunication::setEnpointInfo
void setEnpointInfo(std::pair< asio::ip::address, unsigned short > const &endpointInfo) override
Set the Enpoint Info object.
Definition: UdpCommunication.hpp:137
IUdpCommunication
Interface representing UdpCommunication.
Definition: IUdpCommunication.hpp:23
UdpCommunication::send
void send(std::vector< byte > const &data) override
A method to send a message to the already known ip adress and port adress.
Definition: UdpCommunication.hpp:59
UdpCommunication::async_receive
void async_receive(std::vector< byte > &data, std::function< void(std::error_code const &, std::size_t)> callBack) override
A method to receive a message in an async way.
Definition: UdpCommunication.hpp:117