import { partyDataError, setPartyData } from '../store/partySlice.js'; /** * Stellt eine WebSocket-Verbindung her, um Parteidaten basierend auf einer Übungs-ID zu erhalten. * * Diese Funktion initiiert eine WebSocket-Verbindung zu einem vorgegebenen Server und sendet eine Anfrage * mit der Übungs-ID, um spezifische Partydaten zu erhalten. Sobald die Verbindung geöffnet ist, wird die * Übungs-ID an den Server gesendet. Bei Empfang der Daten (über die `onmessage`-Ereignisbehandlung) werden * die empfangenen Parteidaten durch Dispatchen der `setPartyData`-Aktion im Redux-Store gespeichert. * Im Falle eines Verbindungsfehlers wird ein Fehlerzustand durch Dispatchen der `partyDataError`-Aktion * im Redux-Store gesetzt. Nach erfolgreichem Empfang der Daten wird die WebSocket-Verbindung geschlossen. * * @param {string} exerciseId - Die ID der Übung, für die Parteidaten abgerufen werden sollen. * @param {function} dispatch - Die Redux Dispatch-Funktion, die verwendet wird, um Aktionen im Redux-Store zu dispatchen. */ export function useGetPartyData(exerciseId, dispatch) { const socket = new WebSocket('ws://localhost:6969/partyData'); socket.onopen = function open() { socket.send(JSON.stringify({ excerciseId: parseInt(exerciseId), })); }; socket.onmessage = function incoming(event) { for (var party of JSON.parse(event.data)) { dispatch(setPartyData(party)) } socket.close(); }; socket.onerror = (error) => { dispatch(partyDataError({ isError: true, errorMessage: "ERROR: There was an error with the partyData websocket!" })) }; }