Server side specific
Existing codebase
Polling
Polling framework classes
PollingThread main loop
pollthread.cpp
PollingThread::main_loop::execute_cmd
PollingThread::main_loop::execute_cmd::poll_add_obj
PollingThread::main_loop::execute_cmd::update_period
PollingThread::main_loop::one_more_poll
PollingThread::main_loop::one_more_poll::poll_cmd
PollingThread::main_loop::one_more_poll::poll_attr
PollingThread::main_loop::one_more_poll::eve_heartbeat
PollingThread::main_loop::one_more_poll::store_subdev
PollingThread::main_loop::one_more_trig
Polling client: DServer
DServer::add_poll_obj
Conclusions
Current code base tries to implement Command pattern but fails to do so due to the lack of OOP principles implemented (no polymorphism; complicated responsibilities structure, etc).
The following key features may be extracted from the code base:
1) Heartbeat;
2) Thread control via shared command;
3) Attributes/Commands may be polled at different rate;
4) Thread pool;
5) Values are stored in RingBuffer;
6) external trigger (??? need more info/use cases).
Refactoring proposal
Separate "Control thread" and "Worker threads". Implement standalone queue for execution tasks. "Control thread" will wake up at next execution time and submit the task to "Worker thread" via thread pool interface.
New classes diagram:
See Pull Request #472 for more details.