Jpp  16.0.0
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Member Functions | Private Member Functions | Private Attributes | Friends | List of all members
Recipient Class Reference

#include <recipient.hh>

Public Member Functions

 Recipient (boost::asio::io_service &service, const boost::asio::ip::tcp::endpoint &endpoint, size_t circbuff_size)
 
void sock_reset ()
 
bool sendIfPossible (const Frame &data)
 
 ~Recipient ()
 

Private Member Functions

void connect ()
 
void stop ()
 
bool send (const Frame &data)
 Send data. More...
 

Private Attributes

boost::asio::ip::tcp::socket m_sock
 
boost::asio::ip::tcp::endpoint m_endpoint
 
CircularBuffer m_cbuffer
 
bool m_connected
 

Friends

class RecipientsHandler
 

Detailed Description

Definition at line 15 of file recipient.hh.

Constructor & Destructor Documentation

Recipient::Recipient ( boost::asio::io_service &  service,
const boost::asio::ip::tcp::endpoint &  endpoint,
size_t  circbuff_size 
)
inline

Definition at line 24 of file recipient.hh.

27  :
28  m_sock(service),
29  m_endpoint(endpoint),
30  m_cbuffer(circbuff_size),
31  m_connected(false)
32  {
33  LOG_NOTICE << "Trying to connect to " << m_endpoint;
34  connect();
35  if (!m_connected) {
36  LOG_ERROR << "Connection to " << m_endpoint << " failed";
37  }
38  }
CircularBuffer m_cbuffer
Definition: recipient.hh:19
boost::asio::ip::tcp::socket m_sock
Definition: recipient.hh:17
#define LOG_NOTICE
Definition: log.hh:112
void connect()
Definition: recipient.hh:88
#define LOG_ERROR
Definition: log.hh:111
boost::asio::ip::tcp::endpoint m_endpoint
Definition: recipient.hh:18
bool m_connected
Definition: recipient.hh:20
Recipient::~Recipient ( )
inline

Definition at line 79 of file recipient.hh.

80  {
81  stop();
82  }
void stop()
Definition: recipient.hh:103

Member Function Documentation

void Recipient::sock_reset ( )
inline

Definition at line 40 of file recipient.hh.

41  {
42  stop();
43  connect();
44  }
void stop()
Definition: recipient.hh:103
void connect()
Definition: recipient.hh:88
bool Recipient::sendIfPossible ( const Frame data)
inline

Definition at line 46 of file recipient.hh.

47  {
48 
49  if (! m_connected)
50  {
51  sock_reset();
52 
53  if (! m_connected)
54  {
55  m_cbuffer.push_back(data);
56  return false;
57  }
58  }
59 
60  while (m_cbuffer.size())
61  {
62  if (send(m_cbuffer.front()))
63  {
64  m_cbuffer.pop_front();
65  }
66  else
67  {
68  break;
69  }
70  }
71  if (! send(data))
72  {
73  m_cbuffer.push_back(data);
74  }
75 
76  return m_connected;
77  }
CircularBuffer m_cbuffer
Definition: recipient.hh:19
bool send(const Frame &data)
Send data.
Definition: recipient.hh:115
void sock_reset()
Definition: recipient.hh:40
bool m_connected
Definition: recipient.hh:20
void Recipient::connect ( )
inlineprivate

Definition at line 88 of file recipient.hh.

89  {
90  boost::system::error_code ec;
91  m_sock.connect(m_endpoint, ec);
92  m_connected = !ec;
93 
94  if (m_connected) {
95  boost::asio::socket_base::send_buffer_size option(67108864);
96  m_sock.set_option(option);
97  LOG_NOTICE << "Connection to " << m_endpoint << " succeeded";
98  boost::system::error_code ec;
99  m_sock.shutdown(boost::asio::ip::tcp::socket::shutdown_receive, ec);
100  }
101  }
boost::asio::ip::tcp::socket m_sock
Definition: recipient.hh:17
#define LOG_NOTICE
Definition: log.hh:112
boost::asio::ip::tcp::endpoint m_endpoint
Definition: recipient.hh:18
bool m_connected
Definition: recipient.hh:20
void Recipient::stop ( )
inlineprivate

Definition at line 103 of file recipient.hh.

104  {
105  boost::system::error_code ec;
106  m_sock.shutdown(boost::asio::ip::tcp::socket::shutdown_send, ec);
107  m_sock.close(ec);
108  }
boost::asio::ip::tcp::socket m_sock
Definition: recipient.hh:17
bool Recipient::send ( const Frame data)
inlineprivate

Send data.

Parameters
datathe Frame to send.
Returns
true if OK; else false

Definition at line 115 of file recipient.hh.

116  {
117  boost::system::error_code ec;
118  boost::asio::write(m_sock, boost::asio::buffer(data.data(), data.getFrameLength()), ec);
119  m_connected = !ec;
120 
121  if (ec) {
122  LOG_ERROR << "Error transmitting data to " << m_endpoint << ": " << ec;
123  }
124  return m_connected;
125  }
boost::asio::ip::tcp::socket m_sock
Definition: recipient.hh:17
#define LOG_ERROR
Definition: log.hh:111
boost::asio::ip::tcp::endpoint m_endpoint
Definition: recipient.hh:18
unsigned int getFrameLength() const
Definition: frame.hh:34
bool write(const Vec &v, std::ostream &os)
Write a Vec(tor) to a stream.
Definition: io_ascii.hh:154
bool m_connected
Definition: recipient.hh:20

Friends And Related Function Documentation

friend class RecipientsHandler
friend

Definition at line 84 of file recipient.hh.

Member Data Documentation

boost::asio::ip::tcp::socket Recipient::m_sock
private

Definition at line 17 of file recipient.hh.

boost::asio::ip::tcp::endpoint Recipient::m_endpoint
private

Definition at line 18 of file recipient.hh.

CircularBuffer Recipient::m_cbuffer
private

Definition at line 19 of file recipient.hh.

bool Recipient::m_connected
private

Definition at line 20 of file recipient.hh.


The documentation for this class was generated from the following file: