void handle_start(const session_ptr& the_session, handler_allocator_type& the_allocator, const frame_buffer_ptr& frame_buffer, const boost::system::error_code& error) { if (error) { std::cout << "Start unsuccessful. The error is: " << error.message() << '\n'; return; } std::cout << "Session started successfully. Begin read...\n"; the_session->async_read_some(frame_buffer->begin(), frame_buffer->end(), ma::make_custom_alloc_handler(the_allocator, boost::bind(handle_read, the_session, boost::ref(the_allocator), frame_buffer, _1, _2))); }
void handle_read(const session_ptr& the_session, handler_allocator_type& the_allocator, const frame_buffer_ptr& frame_buffer, const boost::system::error_code& error, std::size_t frames_transferred) { print_frames(*frame_buffer, frames_transferred); if (boost::asio::error::eof == error) { std::cout << "Input stream was closed." \ " But it\'s a serial port so begin read operation again...\n"; the_session->async_read_some(frame_buffer->begin(), frame_buffer->end(), ma::make_custom_alloc_handler(the_allocator, ma::detail::bind( handle_read, the_session, ma::detail::ref(the_allocator), frame_buffer, ma::detail::placeholders::_1, ma::detail::placeholders::_2))); return; } if (error) { std::cout << "Read unsuccessful. Begin the session stop...\n"; the_session->async_stop(ma::make_custom_alloc_handler(the_allocator, ma::detail::bind(handle_stop, ma::detail::placeholders::_1))); return; } the_session->async_read_some(frame_buffer->begin(), frame_buffer->end(), ma::make_custom_alloc_handler(the_allocator, ma::detail::bind(handle_read, the_session, ma::detail::ref(the_allocator), frame_buffer, ma::detail::placeholders::_1, ma::detail::placeholders::_2))); // Only for test of cyclic_read_session::async_write_some //frame_ptr frame = *(frame_buffer->begin()); //the_session->async_write_some(boost::asio::buffer(*frame), // ma::detail::bind(handle_write, the_session, frame, // ma::detail::placeholders::_1, ma::detail::placeholders::_2)); }