Jpp  15.0.1-rc.1-highQE
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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 183 of file clb_swiss_knife.cpp.

Member Typedef Documentation

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

Definition at line 185 of file clb_swiss_knife.cpp.

Constructor & Destructor Documentation

template<class Consumer>
LigierDataHandler< Consumer >::LigierDataHandler ( LigierDataHandler< Consumer > const &  )
private
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 335 of file clb_swiss_knife.cpp.

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

Member Function Documentation

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

Definition at line 198 of file clb_swiss_knife.cpp.

202  {
203  if (error && error != boost::asio::error::operation_aborted) {
204  m_consumer(error, 0, 0);
205  restart();
206  } else if (error == boost::asio::error::operation_aborted) {
207  } else {
208  m_consumer(error, m_buffer + 16, size);
209 
210  boost::asio::async_read(
211  m_socket
212  , boost::asio::buffer(m_buffer, 16)
213  , boost::bind(
215  , this
216  , boost::asio::placeholders::error
217  , boost::asio::placeholders::bytes_transferred
218  )
219  );
220  }
221  }
void header_handle(boost::system::error_code const &error, std::size_t bytes_transferred)
boost::asio::ip::tcp::socket m_socket
template<class Consumer>
void LigierDataHandler< Consumer >::timeout_handle ( boost::system::error_code const &  error)
inlineprivate

Definition at line 223 of file clb_swiss_knife.cpp.

224  {
225  if (!error) {
226  m_socket.async_connect(
227  m_endpoint
228  , boost::bind(
230  , this
231  , boost::asio::placeholders::error
232  )
233  );
234  }
235  }
void connect_handle(boost::system::error_code const &error)
boost::asio::ip::tcp::endpoint m_endpoint
boost::asio::ip::tcp::socket m_socket
template<class Consumer>
void LigierDataHandler< Consumer >::connect_handle ( boost::system::error_code const &  error)
inlineprivate

Definition at line 237 of file clb_swiss_knife.cpp.

238  {
239  if (error && error != boost::asio::error::operation_aborted) {
240  m_consumer(error, 0, 0);
241  m_timer.expires_from_now(boost::posix_time::seconds(1));
242 
243  m_timer.async_wait(
244  boost::bind(
246  , this
247  , boost::asio::placeholders::error
248  )
249  );
250  } else if (error == boost::asio::error::operation_aborted) {
251  } else {
252  std::size_t const size = ligier::prepare_tag(m_buffer, m_buffer_size, m_tag);
253 
254  boost::asio::async_write(
255  m_socket
256  , boost::asio::buffer(m_buffer, size)
257  , boost::bind(
259  , this
260  , boost::asio::placeholders::error
261  , boost::asio::placeholders::bytes_transferred
262  )
263  );
264  }
265  }
void timeout_handle(boost::system::error_code const &error)
std::size_t const m_buffer_size
std::size_t prepare_tag(char *buffer, std::size_t max_size, std::string const &tag)
void subscribe_handle(boost::system::error_code const &error, std::size_t bytes_transferred)
boost::asio::deadline_timer m_timer
boost::asio::ip::tcp::socket m_socket
template<class Consumer>
void LigierDataHandler< Consumer >::subscribe_handle ( boost::system::error_code const &  error,
std::size_t  bytes_transferred 
)
inlineprivate

Definition at line 267 of file clb_swiss_knife.cpp.

270  {
271  if (error && error != boost::asio::error::operation_aborted) {
272  m_consumer(error, 0, 0);
273  restart();
274  } else if (error == boost::asio::error::operation_aborted) {
275  } else {
276  boost::asio::async_read(
277  m_socket
278  , boost::asio::buffer(m_buffer, 16)
279  , boost::bind(
281  , this
282  , boost::asio::placeholders::error
283  , boost::asio::placeholders::bytes_transferred
284  )
285  );
286  }
287  }
void header_handle(boost::system::error_code const &error, std::size_t bytes_transferred)
boost::asio::ip::tcp::socket m_socket
template<class Consumer>
void LigierDataHandler< Consumer >::header_handle ( boost::system::error_code const &  error,
std::size_t  bytes_transferred 
)
inlineprivate

Definition at line 289 of file clb_swiss_knife.cpp.

292  {
293  if (error && error != boost::asio::error::operation_aborted) {
294  m_consumer(error, 0, 0);
295  restart();
296  } else if (error == boost::asio::error::operation_aborted) {
297  } else {
298  std::size_t const size = ligier::read_data_size(m_buffer);
299 
300  boost::asio::async_read(
301  m_socket
302  , boost::asio::buffer(m_buffer + 16, size)
303  , boost::bind(
305  , this
306  , boost::asio::placeholders::error
307  , boost::asio::placeholders::bytes_transferred
308  )
309  );
310  }
311  }
void data_handle(boost::system::error_code const &error, std::size_t size)
std::size_t read_data_size(char const *const buffer)
boost::asio::ip::tcp::socket m_socket
template<class Consumer>
void LigierDataHandler< Consumer >::restart ( )
inlineprivate

Definition at line 313 of file clb_swiss_knife.cpp.

314  {
315  boost::system::error_code ec;
316 
317  m_socket.shutdown(boost::asio::ip::tcp::socket::shutdown_both, ec);
318  m_socket.close(ec);
319 
320  m_socket.async_connect(
321  m_endpoint
322  , boost::bind(
324  , this
325  , boost::asio::placeholders::error
326  )
327  );
328  }
void connect_handle(boost::system::error_code const &error)
boost::asio::ip::tcp::endpoint m_endpoint
boost::asio::ip::tcp::socket m_socket
template<class Consumer>
LigierDataHandler& LigierDataHandler< Consumer >::operator= ( LigierDataHandler< Consumer > const &  )
private

Member Data Documentation

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

Definition at line 187 of file clb_swiss_knife.cpp.

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

Definition at line 188 of file clb_swiss_knife.cpp.

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

Definition at line 190 of file clb_swiss_knife.cpp.

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

Definition at line 191 of file clb_swiss_knife.cpp.

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

Definition at line 193 of file clb_swiss_knife.cpp.

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

Definition at line 194 of file clb_swiss_knife.cpp.

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

Definition at line 196 of file clb_swiss_knife.cpp.


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