Jpp 19.3.0-rc.3
the software that should make you happy
Loading...
Searching...
No Matches
data_input_interface.hh
Go to the documentation of this file.
1#ifndef DATA_INPUT_INTERFACE_HH
2#define DATA_INPUT_INTERFACE_HH
3
4#include <cassert>
5#include <vector>
6
7#include <boost/asio.hpp>
8#include <boost/thread.hpp>
9#include <boost/foreach.hpp>
10#include <boost/scoped_ptr.hpp>
11
13
14/**
15 * \author cpellegrino
16 */
17
19{
22 boost::asio::io_service m_service;
23 boost::scoped_ptr<boost::thread_group> m_threads;
24
25 public:
26
27 DataInputInterface(size_t number_of_workers = 1)
28 :
29 m_number_of_workers(number_of_workers),
30 m_threads(0)
31 {}
32
34 {
35 stop();
36 for (size_t i = 0; i < m_channel_handlers.size(); ++i)
37 {
38 delete m_channel_handlers[i];
39 }
40 }
41
42 void stop()
43 {
44 m_service.stop();
45
46 if (m_threads)
47 {
48 m_threads->join_all();
49 }
50
51 m_threads.reset();
52 }
53
54 void pause()
55 {
56 BOOST_FOREACH(InChannelHandler* h, m_channel_handlers)
57 {
58 h->pause();
59 }
60 }
61
62 void cont()
63 {
64 BOOST_FOREACH(InChannelHandler* h, m_channel_handlers)
65 {
66 h->cont();
67 }
68 }
69
70 void start()
71 {
72 assert(!m_threads && "Calling DataInputInterface::start() on started istance.");
73
74 m_threads.reset(new boost::thread_group);
75 m_service.reset();
76 for (std::size_t i = 0; i < m_number_of_workers; ++i)
77 {
78 m_threads->create_thread(boost::bind(&boost::asio::io_service::run,
79 &m_service));
80 }
81 }
82
84 {
85 if (m_threads)
86 {
87 m_threads->create_thread(boost::bind(&boost::asio::io_service::run,
88 &m_service));
89 }
90
92 }
93
94 void add_channel(unsigned short port, FrameFarm& farm)
95 {
96 InChannelHandler* new_channel = new InChannelHandler(m_service, port, farm);
97 m_channel_handlers.push_back(new_channel);
98 }
99};
100
101#endif // INPUT_INTERFACE_HH
boost::scoped_ptr< boost::thread_group > m_threads
std::vector< InChannelHandler * > m_channel_handlers
void add_channel(unsigned short port, FrameFarm &farm)
boost::asio::io_service m_service
DataInputInterface(size_t number_of_workers=1)