33 lines
1.6 KiB
JavaScript
Executable File
33 lines
1.6 KiB
JavaScript
Executable File
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!" }))
|
|
};
|
|
|
|
}
|