36 lines
734 B
C++
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&) {
|
|
}
|
|
}
|
|
};
|