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; } }