Firefly Synch

Introduction

Realizzazione di un sistema firefly che simula il comportamento di 3 lucciole, gestendo inoltre la sincronizzazione tra queste.

Requirements

  1. Costruire il simulatore di un sistema costituito da 3 lucciole
  2. Le lucciole lampeggiano ciascuna con una frequenza propria e costante
  3. Dopo 10 secondi le lucciole devono lampeggiare in modo sincronizzato

Requirement analysis

Problem analysis

Analisi del problema come orchestratore

Per gestire la sincronizzazione delle firefly si considera il modello con orchestratore. In particolare si realizza l'orchestratore come un QActor di nome fireflyqueen, che invia un messaggio di sincronizzazione di priorità più elevata, al fine di dettare la frequenza delle altre lucciole. Queste passano da una prorpia frequenza personale, a quella dettata dall'orchestratore. Questo nuovo attore scambia informazini con le lucciole.
L'orchestratore dopo un tempo di 10 secondi, emana ad intervalli costanti un evento sync, secondo un timer da lui deciso. Questi eventi dettano il tempo alle lucciole
                System fireflysync
                
                //messaggio per la gestione della sincronizzazione, in questa implementazione l'argomento è superfluo
                Event sync : time ( X )

                //QActor orchestratore, fireflyqeen, dopo un periodo di 10 secondi, comincia a dettare tramite eventi il timing
                QActor fireflyqueen context ctxfirefly {

                    //init a variable TimeToSync at 10 second
                     
                    State s0 initial{
                        //initial state, wait until 10 second enlapsed
                    }
                    Transition t0 
                        whenTimeVar TimeToSync -> handleSync 
                    
                    State handleSync{	
                        //emit periodically the new time
                        emit sync : time($Timer)
                    }
                    Transition t0 
                        whenTimeVar Timer -> handleSync
                } 
            
La crezione delle lucciole avviene dinamicamente tramite il QActor creator, cui unico scopo è creare le lucciole, etichettate come dinamicOnly.
                               
                Context ctxfirefly ip [ host="localhost" port=8040 ]
                
                //QActor responsabile della creazione delle firefly
                QActor creator context ctxfirefly{
                    State s0 initial{      
                        //initial state:
                        //Create 3 firefly inst.
                    }
                }   
            
Si specifica ulteriormente il comportamento del QActor firefly, il quale per gestire la sincronizzazione, deve elaborare gli eventi di sincronizzazione periodici e prioritari che manda l'orchestratore. Si definisce pertanto un ulteriore stato handleSync, in cui si accende/spegne la luce della singola firefly al tempo dettato dall'evento emanato dall'orchestratore.

                //QActor firefly definisce il modello della firefly e ne definisce il comportamento
                QActor firefly context ctxfirefly dynamicOnly{
                    
                    // Definizione delle variabili per la temporizzazione:
                    // Definisco una variabile Timer

                    State s0 initial{
                        //init firefly state
                    }
                    Goto flash

                    State flash{
                        
                        //Turn on the Light              
                        //Wait 
                        //Turno Off the Light
                    }
                    Transition t0
                        whenTimeVar Timer   -> flash
                        whenEvent   sync    -> syncflash
                        
                    State handleSync{
                        //Turn on the Light           
                        //Wait	
                        //Turno Off the Light
                    }
                    Transition t0
                        whenEvent   sync    -> syncflash
                    
                }

            

Test plans

Project

Testing

Deployment

Maintenance



By studentName email: gregorio.bussolari@studio.unibo.it, greg GIT repo: https://github.com/GregorioBussolari/iss2026Unibo.git