Jpp  master_rocky-40-g5f0272dcd
the software that should make you happy
Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
LigierDataHandler< Consumer > Class Template Reference

Public Member Functions

 LigierDataHandler (boost::asio::io_service &service, std::string const &tag, boost::asio::ip::tcp::endpoint const &endpoint, char *buffer, std::size_t buffer_size, Consumer const &consumer)
 

Private Types

typedef LigierDataHandler< Consumer > this_type
 

Private Member Functions

void data_handle (boost::system::error_code const &error, std::size_t size)
 
void timeout_handle (boost::system::error_code const &error)
 
void connect_handle (boost::system::error_code const &error)
 
void subscribe_handle (boost::system::error_code const &error, std::size_t bytes_transferred)
 
void header_handle (boost::system::error_code const &error, std::size_t bytes_transferred)
 
void restart ()
 
 LigierDataHandler (LigierDataHandler const &)
 
LigierDataHandleroperator= (LigierDataHandler const &)
 

Private Attributes

boost::asio::ip::tcp::socket m_socket
 
boost::asio::deadline_timer m_timer
 
std::string m_tag
 
boost::asio::ip::tcp::endpoint m_endpoint
 
char * m_buffer
 
std::size_t const m_buffer_size
 
Consumer m_consumer
 

Detailed Description

template<class Consumer>
class LigierDataHandler< Consumer >

Definition at line 189 of file clb_swiss_knife.cpp.

Member Typedef Documentation

◆ this_type

template<class Consumer >
typedef LigierDataHandler<Consumer> LigierDataHandler< Consumer >::this_type
private

Definition at line 191 of file clb_swiss_knife.cpp.

Constructor & Destructor Documentation

◆ LigierDataHandler() [1/2]

template<class Consumer >
LigierDataHandler< Consumer >::LigierDataHandler ( LigierDataHandler< Consumer > const &  )
private

◆ LigierDataHandler() [2/2]

template<class Consumer >
LigierDataHandler< Consumer >::LigierDataHandler ( boost::asio::io_service &  service,
std::string const &  tag,
boost::asio::ip::tcp::endpoint const &  endpoint,
char *  buffer,
std::size_t  buffer_size,
Consumer const &  consumer 
)
inline

Definition at line 341 of file clb_swiss_knife.cpp.

348  : m_socket(service)
349  , m_timer(service)
350  , m_tag(tag)
351  , m_endpoint(endpoint)
352  , m_buffer(buffer)
354  , m_consumer(consumer)
355  {
356  m_socket.async_connect(
357  m_endpoint
358  , boost::bind(
360  , this
361  , boost::asio::placeholders::error
362  )
363  );
364  }
boost::asio::ip::tcp::endpoint m_endpoint
void connect_handle(boost::system::error_code const &error)
boost::asio::deadline_timer m_timer
std::size_t const m_buffer_size
boost::asio::ip::tcp::socket m_socket
static const size_t buffer_size

Member Function Documentation

◆ data_handle()

template<class Consumer >
void LigierDataHandler< Consumer >::data_handle ( boost::system::error_code const &  error,
std::size_t  size 
)
inlineprivate

Definition at line 204 of file clb_swiss_knife.cpp.

208  {
209  if (error && error != boost::asio::error::operation_aborted) {
210  m_consumer(error, 0, 0);
211  restart();
212  } else if (error == boost::asio::error::operation_aborted) {
213  } else {
214  m_consumer(error, m_buffer + 16, size);
215 
216  boost::asio::async_read(
217  m_socket
218  , boost::asio::buffer(m_buffer, 16)
219  , boost::bind(
221  , this
222  , boost::asio::placeholders::error
223  , boost::asio::placeholders::bytes_transferred
224  )
225  );
226  }
227  }
void header_handle(boost::system::error_code const &error, std::size_t bytes_transferred)

◆ timeout_handle()

template<class Consumer >
void LigierDataHandler< Consumer >::timeout_handle ( boost::system::error_code const &  error)
inlineprivate

Definition at line 229 of file clb_swiss_knife.cpp.

230  {
231  if (!error) {
232  m_socket.async_connect(
233  m_endpoint
234  , boost::bind(
236  , this
237  , boost::asio::placeholders::error
238  )
239  );
240  }
241  }

◆ connect_handle()

template<class Consumer >
void LigierDataHandler< Consumer >::connect_handle ( boost::system::error_code const &  error)
inlineprivate

Definition at line 243 of file clb_swiss_knife.cpp.

244  {
245  if (error && error != boost::asio::error::operation_aborted) {
246  m_consumer(error, 0, 0);
247  m_timer.expires_from_now(boost::posix_time::seconds(1));
248 
249  m_timer.async_wait(
250  boost::bind(
252  , this
253  , boost::asio::placeholders::error
254  )
255  );
256  } else if (error == boost::asio::error::operation_aborted) {
257  } else {
258  std::size_t const size = ligier::prepare_tag(m_buffer, m_buffer_size, m_tag);
259 
260  boost::asio::async_write(
261  m_socket
262  , boost::asio::buffer(m_buffer, size)
263  , boost::bind(
265  , this
266  , boost::asio::placeholders::error
267  , boost::asio::placeholders::bytes_transferred
268  )
269  );
270  }
271  }
void subscribe_handle(boost::system::error_code const &error, std::size_t bytes_transferred)
void timeout_handle(boost::system::error_code const &error)
std::size_t prepare_tag(char *buffer, std::size_t max_size, std::string const &tag)

◆ subscribe_handle()

template<class Consumer >
void LigierDataHandler< Consumer >::subscribe_handle ( boost::system::error_code const &  error,
std::size_t  bytes_transferred 
)
inlineprivate

Definition at line 273 of file clb_swiss_knife.cpp.

276  {
277  if (error && error != boost::asio::error::operation_aborted) {
278  m_consumer(error, 0, 0);
279  restart();
280  } else if (error == boost::asio::error::operation_aborted) {
281  } else {
282  boost::asio::async_read(
283  m_socket
284  , boost::asio::buffer(m_buffer, 16)
285  , boost::bind(
287  , this
288  , boost::asio::placeholders::error
289  , boost::asio::placeholders::bytes_transferred
290  )
291  );
292  }
293  }

◆ header_handle()

template<class Consumer >
void LigierDataHandler< Consumer >::header_handle ( boost::system::error_code const &  error,
std::size_t  bytes_transferred 
)
inlineprivate

Definition at line 295 of file clb_swiss_knife.cpp.

298  {
299  if (error && error != boost::asio::error::operation_aborted) {
300  m_consumer(error, 0, 0);
301  restart();
302  } else if (error == boost::asio::error::operation_aborted) {
303  } else {
304  std::size_t const size = ligier::read_data_size(m_buffer);
305 
306  boost::asio::async_read(
307  m_socket
308  , boost::asio::buffer(m_buffer + 16, size)
309  , boost::bind(
311  , this
312  , boost::asio::placeholders::error
313  , boost::asio::placeholders::bytes_transferred
314  )
315  );
316  }
317  }
void data_handle(boost::system::error_code const &error, std::size_t size)
std::size_t read_data_size(char const *const buffer)

◆ restart()

template<class Consumer >
void LigierDataHandler< Consumer >::restart ( )
inlineprivate

Definition at line 319 of file clb_swiss_knife.cpp.

320  {
321  boost::system::error_code ec;
322 
323  m_socket.shutdown(boost::asio::ip::tcp::socket::shutdown_both, ec);
324  m_socket.close(ec);
325 
326  m_socket.async_connect(
327  m_endpoint
328  , boost::bind(
330  , this
331  , boost::asio::placeholders::error
332  )
333  );
334  }

◆ operator=()

template<class Consumer >
LigierDataHandler& LigierDataHandler< Consumer >::operator= ( LigierDataHandler< Consumer > const &  )
private

Member Data Documentation

◆ m_socket

template<class Consumer >
boost::asio::ip::tcp::socket LigierDataHandler< Consumer >::m_socket
private

Definition at line 193 of file clb_swiss_knife.cpp.

◆ m_timer

template<class Consumer >
boost::asio::deadline_timer LigierDataHandler< Consumer >::m_timer
private

Definition at line 194 of file clb_swiss_knife.cpp.

◆ m_tag

template<class Consumer >
std::string LigierDataHandler< Consumer >::m_tag
private

Definition at line 196 of file clb_swiss_knife.cpp.

◆ m_endpoint

template<class Consumer >
boost::asio::ip::tcp::endpoint LigierDataHandler< Consumer >::m_endpoint
private

Definition at line 197 of file clb_swiss_knife.cpp.

◆ m_buffer

template<class Consumer >
char* LigierDataHandler< Consumer >::m_buffer
private

Definition at line 199 of file clb_swiss_knife.cpp.

◆ m_buffer_size

template<class Consumer >
std::size_t const LigierDataHandler< Consumer >::m_buffer_size
private

Definition at line 200 of file clb_swiss_knife.cpp.

◆ m_consumer

template<class Consumer >
Consumer LigierDataHandler< Consumer >::m_consumer
private

Definition at line 202 of file clb_swiss_knife.cpp.


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