2.2.Beschreibung der Bausteine
2.2.1.Household Baustein
Dieser Baustein enthält den spezifischen Programmcode und regelt zentral die Kommunikation mit der (fiktiven) SpeakerSystem-API. Ein Household (=Haushalt) bündelt logisch alle im Büro befindlichen SpeakerSystem Devices.
Der Baustein sendet nach Initialisierung der Logik seine Laufzeit-ID auf Ausgang 1 und macht diese damit den Player Bausteinen bekannt.
2.2.2.Player Baustein
Dieser Baustein repräsentiert jeweils einen Player (PLAY:1, PLAY:3, usw.). In diesem Beispiel befindet sich jeder Player in einem eigenen Raum im Büro. Jeder Player Baustein (bzw. jede Instanz des Bausteins) erhält die Laufzeit-ID des Household Bausteins über Eingang 1. Damit kann er auf die Methoden des Household Bausteins zugreifen und muss nicht direkt mit der SpeakerSystem-API kommunizieren.
2.3.Ablauf der Kommunikation
Um den Ablauf der Kommunikation zwischen den Bausteinen im Detail zu zeigen, wird im Folgenden jeweils auf die Stellen im Quellcode verwiesen. Jeder Codezeile wird zur besseren Übersicht die entsprechende Zeile im jeweiligen Quellcode des Bausteins vorangestellt. Der Quellcode des Household Bausteins befindet sich in der Datei 10705_SpeakerSystem Household.py. Der Quellcode des Player Bausteins befindet sich in der Datei 10706_SpeakerSystem Player.py.
2.3.1.Nach Start des HS
- Household Baustein ermittelt seine Laufzeit-ID:
20 module_id = self._get_module_id() |
- Household Baustein sendet seine Laufzeit-ID auf den Ausgang:
21 self._set_output_value(self.PIN_O_SPEAKERSYSTEM_PLAYER, module_id) |
- Player Baustein ruft die Instanz des Household Bausteins mit Hilfe der Laufzeit-ID (value) ab und merkt sich diese:
25 self.household_instance = self.FRAMEWORK.get_instance_by_id(value) |
(Dies passiert jeweils einmal pro Instanz des Player Bausteins. Also insgesamt drei mal.) - Player Baustein registriert eine Callback-Methode (self.on_trackinfo_event) beim Household Baustein. Diese wird vom Household Baustein aufgerufen, sobald das aktuell gespielte Lied geändert wird:
28 self.household_instance.register_for_trackinfo_update(self._get_input_value(self.PIN_I_DEVICE_ID), self.on_trackinfo_event) |
(Dies passiert jeweils einmal pro Instanz des Player Baustein. Also insgesamt drei mal.)
2.3.2.Player Baustein zur Laufzeit
Zur Laufzeit trifft auf Eingang 3 des Player Bausteins ein Wert ein
- Der Player Baustein ruft die Methode do_play_or_pause(device_id) des Household Bausteins auf:
33 self.household_instance.do_play_or_pause(self._get_input_value(self.PIN_I_DEVICE_ID)) |
2.3.3.Household Baustein zur Laufzeit
Zur Laufzeit erhält der Household Baustein eine Änderung des aktuell gespielten Liedes
- Der Household Baustein sucht anhand der mitgelieferten Client ID das entsprechende Callback und führt (wenn vorhanden) dieses aus:
55 if device_id in self.registered_devices.keys(): 56 self.registered_devices[device_id](args["info"]) |