class interface_machine { messaging::receiver incoming; public: void done() { get_sender().send(messaging::close_queue()); } void run() { try { for(;;) { incoming.wait() .handle( [&](issue_money const& msg) { { std::lock_guard lk(iom); std::cout<<"Issuing " <( [&](display_insufficient_funds const& msg) { { std::lock_guard lk(iom); std::cout<<"Insufficient funds"<( [&](display_enter_pin const& msg) { { std::lock_guard lk(iom); std::cout <<"Please enter your PIN (0-9)" <( [&](display_enter_card const& msg) { { std::lock_guard lk(iom); std::cout<<"Please enter your card (I)" <( [&](display_balance const& msg) { { std::lock_guard lk(iom); std::cout <<"The balance of your account is " <( [&](display_withdrawal_options const& msg) { { std::lock_guard lk(iom); std::cout<<"Withdraw 50? (w)"<( [&](display_withdrawal_cancelled const& msg) { { std::lock_guard lk(iom); std::cout<<"Withdrawal cancelled" <( [&](display_pin_incorrect_message const& msg) { { std::lock_guard lk(iom); std::cout<<"PIN incorrect"<( [&](eject_card const& msg) { { std::lock_guard lk(iom); std::cout<<"Ejecting card"<