diff --git a/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/bomboloni-mess-clock.java b/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/bomboloni-mess-clock.java new file mode 100644 index 0000000..5a35fcd --- /dev/null +++ b/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/bomboloni-mess-clock.java @@ -0,0 +1,119 @@ +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) + + + 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){ + + send("piero") to vassoio.piero_rosa; + p = receive(mess) from servi; + + 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){ + + send(s) to clock.tick; + } +} \ No newline at end of file