#include <iostream>
using namespace std::chrono_literals;
{
state_t
off{
this }, blinking{
this },
blink_on{ initial_substate_of{ blinking } },
blink_off{ substate_of{ blinking } };
public :
{
off.just_switch_to< turn_on_off >( blinking );
blinking.just_switch_to< turn_on_off >(
off );
blink_on
.on_enter( []{ std::cout << "ON" << std::endl; } )
.on_exit( []{ std::cout << "off" << std::endl; } )
.time_limit( std::chrono::milliseconds{1250}, blink_off );
blink_off
.time_limit( std::chrono::milliseconds{750}, blink_on );
}
};
int main()
{
try
{
return coop.
make_agent< blinking_led >()->so_direct_mbox();
} );
std::cout << "Turn blinking on for 10s" << std::endl;
so_5::send< blinking_led::turn_on_off >( m );
std::this_thread::sleep_for( 10s );
std::cout << "Turn blinking off for 5s" << std::endl;
so_5::send< blinking_led::turn_on_off >( m );
std::this_thread::sleep_for( 5s );
std::cout << "Turn blinking on for 5s" << std::endl;
so_5::send< blinking_led::turn_on_off >( m );
std::this_thread::sleep_for( 5s );
std::cout << "Stopping..." << std::endl;
} );
}
catch( const std::exception & ex )
{
std::cerr << "Error: " << ex.what() << std::endl;
}
return 0;
}