@startuml group_4_puzzle_globes
actor operator
participant MQTT_4_globes
box "Globes"
    collections slaves
    participant master
end box
participant MQTT_4_door_entrance

== Init ==
master -> MQTT_4_door_entrance: register
master -> MQTT_4_globes: register
slaves -> MQTT_4_globes: register

== Solve puzzle ==
operator -> MQTT_4_globes: trigger: on [#participants]
MQTT_4_globes -> master: trigger: on [#participants]
MQTT_4_globes -> slaves: trigger: on [#participants]

loop [while door is open (state != inactive [closed])]
    alt [on all globes are touched]
        master -> MQTT_4_door_entrance: trigger: off
        ...
        MQTT_4_door_entrance -> master: status: inactive [closed]
    else [on any globe was released]
        master -> MQTT_4_door_entrance: trigger: on
    else
        ...
        master -> MQTT_4_globes: status: active [stateOfAllGlobes]
        note left
            The master publishes the states
            of all globes.
        end note
        ...
        slaves -> MQTT_4_globes: message: active [id, isTouched]
        note left
            Type "MESSAGE" because of
            internal communication
        end note
    else 
    end

end

MQTT_4_globes <- master: status: solved
operator <- MQTT_4_globes: status: solved
@enduml