Realizzazione di un
sistema firefly che simula
il comportamento di 3 lucciole, gestendo inoltre la sincronizzazione tra queste.
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
}