13 high_resolution_clock::duration period) {
15 process._period = period;
16 _processes.push_back(&process);
17 process._manager_ptr =
this;
34 if ( _channels.find(name) != _channels.end() ) {
35 return *(_channels[name]);
37 throw Exception(
"Tried to access an unregistered or non-existant channel.");
52 event_handlers[event_name].push_back(handler);
70 if ( event_handlers.find(event.
name()) != event_handlers.end() ) {
71 for (
auto handler : event_handlers[event.
name()] ) {
84 for(
auto process_ptr : _processes) {
99 return all([
this](
Process& p) { p._start(_elapsed) ;});
124 _start_time = high_resolution_clock::now();
125 _elapsed = high_resolution_clock::duration::zero();
128 while ( _elapsed < runtime ) {
130 _elapsed = high_resolution_clock::now() - _start_time;
The Process Manager class.
Manager & schedule(Process &process, high_resolution_clock::duration period)
Manager & run(high_resolution_clock::duration)
Channel & channel(string)
Manager & watch(string event_name, std::function< void(Event &)> handler)
Events that can be emitted, watched, and responded to with event handlers.
Manager & add_channel(Channel &)
high_resolution_clock::duration last_update()
high_resolution_clock::duration period()
An exception class for Elma.
Manager & all(std::function< void(Process &)> f)
A channel for sending double values to and from Process objects.
Manager & emit(const Event &event)
An abstract base class for processes.
Client & process_responses()