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