add original source
This commit is contained in:
43
source/listing_4.15.cpp
Normal file
43
source/listing_4.15.cpp
Normal file
@@ -0,0 +1,43 @@
|
||||
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&)
|
||||
{
|
||||
}
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user