UniTO/anno2/Sem1/Galla/MCAD/esercizi2019/bomboloni_sol/bomboloni-mess-clock.java

120 lines
2.4 KiB
Java
Raw Permalink Normal View History

2019-01-23 12:03:37 +01:00
process vassoio{
int b = 0;
port String piero_rosa;
String mess;
port signal rilascio_vassoio;
signal s;
process p;
boolean attesaPiero = false;
send(b) to mario.friggi;
p = receive(s) from rilascio_vassoio;
b = 30;
while(true){
p = receive(mess) from piero_rosa;
if(mess=="piero"){
b--;
if(b==0){
attesaPiero = true;
send("finiti") to p.servi;
send(0) to clock.setTimer;
}
else{
send("non finiti") to p.servi;
}
}
else if(mess=="rosa"){
send(b) to mario.friggi;
p = receive(s) from rilascio_vassoio;
b = 30;
send(s) to rosa.rilascio_rosa;
if(attesaPiero){
attesaPiero = false;
send(s) to Piero.riprendi;
}
}
}
}
process Mario{
process p;
signal s;
port int friggi;
int b_rim;
while(true){
p = receive(b_rim) from friggi;
if(b_rim>0)
<butta>
<friggi>
send(60) to clock.setTimer;
send(s) to p.rilascio_vassoio;
}
}
process Piero{
process p;
port signal riprendi;
signal s;
port String servi;
String mess;
while(true){
<attendi clienti>
send("piero") to vassoio.piero_rosa;
p = receive(mess) from servi;
<servo cliente>
if(mess == "finiti"){
p = receive(s) from riprendi;
}
}
}
process Rosa{
port signal rilascio_rosa;
signal s;
process p;
while(true){
send(s) to clock.waitTimer;
p = receive(s) from rilascio_rosa;
send("rosa") to vassoio.piero_rosa;
p = receive(s) from rilascio_rosa;
}
}
process Clock{
port Signal waitTimer;
port int setTimer;
port Signal tick;
signal s;
process p;
int min;
int tempo = 0;
int sveglia = 0;
boolean inAscolto = false;
do
[] p = receive(s) from tick; -> // Aumenta il tempo e se il timer scade..
tempo++;
if(sveglia == tempo && inAscolto){ // ..se il tempo è uguale alla sveglia e Rosa è sulla receive...
inAscolto = false;
send(s) to rosa.rilascio_rosa; // ..allora sveglia Rosa
sveglia = 0;
}
[] p = receive(min) from setTimer; -> // Viene settato il Timer a zero o a 60
sveglia = tempo + min;
if(sveglia == tempo && inAscolto){ // Se il tempo è uguale alla sveglia e Rosa è sulla receive...
inAscolto = false;
send(s) to rose.rilascio_rosa; // ..llora sveglia Rosa
sveglia = 0;
}
[] p = receive(s) from waitTimer; -> // Si mette Rosa sulla receive accettando la send di waitTimer
inAscolto = true;
od
}
process Tempo{
signal s;
while(true){
<aspetta un secondo>
send(s) to clock.tick;
}
}