UniTO/anno2/YearI/FirstSem/MCAD/esercizi2019/bomboloni_sol/timer/bomboloni-rend-clock.java

95 lines
1.7 KiB
Java
Raw Normal View History

2018-12-03 17:53:23 +01:00
process vassoio{
int b = 0;
boolean attesaPiero = false;
entry piero_rosa(in String inMess, out String outMess);
call mario.friggi(b);
b = 30;
while(true){
accept piero_rosa(in String inMess, out String outMess)
{
if(inMess=="piero"){
b--;
if(b==0){
outMess = "finiti";
attesaPiero = true;
call clock.setTimer(0);
}
else{
outMess = "non finiti";
}
}
else if(inMess=="rosa"){
call mario.friggi(b);
b = 30;
if (attesaPiero) {
attesaPiero = false;
call Piero.riprendi();
}
}
}
}
}
process Mario{
entry friggi(in int b_rimasti);
while(true){
accept friggi(in int b_rim)
{
if(b_rim>0)
<butta>
<friggi>
call clock.setTimer(60);
}
}
}
process Piero{
entry riprendi();
String mess;
while(true){
<attendi clienti>
call vassoio.piero_rosa("piero");
<servo cliente>
if (mess == "finiti") {
accept riprendi()
}
}
}
process Rosa{
while(true){
call clock.waitTimer();
call vassoio.piero_rosa("rosa");
}
}
process Clock{
entry waitTimer();
entry setTimer(in int min);
entry tick;
int tempo = 0;
int sveglia = 0;
do
[] accept tick -> tempo++; // Incrementa il tempo
[] accept setTimer(in int min)
{
if(min == 0){ // Se Piero ha fatto una setTimer(0)..
accept waitTimer() // ..allora sveglio Rosa dalla waitTimer()
}
else{
sveglia = tempo + min; // Altrimenti setto normalmente la sveglia
}
}
[](tempo == sveglia); accept waitTimer() // Se è il momento di svegliare Rosa accettiamo la sua call
od
}
process Tempo{
while(true){
<aspetta un secondo>
call clock.tick;
}
}