TraveSim Adapters  0.1
Protobuf adapters for TraveSim project
sender.cpp
Go to the documentation of this file.
1 /**
2  * @file sender.cpp
3  *
4  * @author Lucas Haug <lucas.haug@thuneratz.org>
5  * @author Lucas Schneider <lucas.schneider@thuneratz.org>
6  *
7  * @brief Send data using UDP
8  *
9  * @date 04/2021
10  *
11  * @copyright MIT License - Copyright (c) 2021 ThundeRatz
12  */
13 
14 #include <iostream>
15 #include <string>
16 #include <exception>
17 #include <boost/asio.hpp>
18 
20 
21 /*****************************************
22  * Private Constants
23  *****************************************/
24 
25 #define NO_FLAGS 0U
26 
27 /*****************************************
28  * Class Methods Bodies Definitions
29  *****************************************/
30 
31 namespace travesim {
32 namespace udp {
33 Sender::Sender(std::string receiver_address, short receiver_port) {
34  this->set_receiver_endpoint(receiver_address, receiver_port);
35 
36  this->socket = new boost::asio::ip::udp::socket(this->io_context);
37  this->socket->open(this->endpoint.protocol());
38 };
39 
41  this->socket->close();
42 
43  delete this->socket;
44 };
45 
46 size_t Sender::send(const char* buffer, const size_t buffer_size) {
47  size_t bytes_sent;
48  boost::system::error_code ec;
49 
50  bytes_sent = this->socket->send_to(boost::asio::buffer(buffer, buffer_size), this->endpoint, NO_FLAGS, ec);
51 
52  switch (ec.value()) {
53  case boost::system::errc::success: {
54  /**
55  * @todo Message logging?
56  */
57  break;
58  }
59 
60  default: {
61  throw boost::system::system_error(ec);
62  }
63  }
64 
65  return bytes_sent;
66 };
67 
68 void Sender::set_receiver_endpoint(const std::string receiver_address, const short receiver_port) {
69  const boost::asio::ip::address receiver_boost_addr = boost::asio::ip::address::from_string(receiver_address);
70 
71  this->endpoint = boost::asio::ip::udp::endpoint(receiver_boost_addr, receiver_port);
72 };
73 } // namespace udp
74 } // namespace travesim
Send data using UDP.
Sender(const std::string receiver_address, const short receiver_port)
Construct a new Sender object.
Definition: sender.cpp:33
boost::asio::io_context io_context
Definition: sender.hpp:63
size_t send(const char *buffer, const size_t buffer_size)
Send data using UDP.
Definition: sender.cpp:46
virtual ~Sender()
Destroy the Sender object.
Definition: sender.cpp:40
void set_receiver_endpoint(const std::string receiver_address, const short receiver_port)
Set the receiver endpoint object.
Definition: sender.cpp:68
boost::asio::ip::udp::socket * socket
Definition: sender.hpp:59
#define NO_FLAGS
Definition: sender.cpp:25
boost::asio::ip::udp::endpoint endpoint
Definition: sender.hpp:60