Files
concurrency-in-action/source/listing_4.15.cpp
2018-10-18 00:40:34 -05:00

36 lines
734 B
C++

struct card_inserted {
std::string account;
};
class atm {
messaging::receiver incoming;
messaging::sender bank;
messaging::sender interface_hardware;
void (atm::*state)();
std::string account;
std::string pin;
void waiting_for_card()
{
interface_hardware.send(display_enter_card());
incoming.wait().handle<card_inserted>([&](card_inserted const& msg) {
account = msg.account;
pin = "";
interface_hardware.send(display_enter_pin());
state = &atm::getting_pin;
});
}
void getting_pin();
public:
void run()
{
state = &atm::waiting_for_card;
try {
for (;;) {
(this->*state)();
}
}
catch (messaging::close_queue const&) {
}
}
};