Jpp 19.3.0-rc.1
the software that should make you happy
Loading...
Searching...
No Matches
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 >
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(
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(
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(
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(
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(
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(
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(
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: