mirror of
https://github.com/ets-cfuhrman-pfe/EvalueTonSavoir.git
synced 2025-08-11 21:23:54 -04:00
43 lines
No EOL
1.2 KiB
JavaScript
43 lines
No EOL
1.2 KiB
JavaScript
async function fetchRoomInfo(r) {
|
|
try {
|
|
// Make request to API to get room info
|
|
let res = await r.subrequest(`/api/room/${r.variables.room_id}`);
|
|
|
|
if (res.status !== 200) {
|
|
r.error(`Failed to fetch room info: ${res.status}`);
|
|
return null;
|
|
}
|
|
|
|
return JSON.parse(res.responseText);
|
|
} catch (error) {
|
|
r.error(`Error fetching room info: ${error}`);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
// Main routing function for WebSocket connections
|
|
async function routeWebSocket(r) {
|
|
try {
|
|
const roomInfo = await fetchRoomInfo(r);
|
|
|
|
if (!roomInfo || !roomInfo.host) {
|
|
r.return(404, 'Room not found or invalid');
|
|
return;
|
|
}
|
|
|
|
// Route the WebSocket connection to the room's host
|
|
r.internalRedirect(`@quiz_room_${roomInfo.host}`);
|
|
|
|
} catch (error) {
|
|
r.error(`WebSocket routing error: ${error}`);
|
|
r.return(500, 'Internal routing error');
|
|
}
|
|
}
|
|
|
|
// Helper function to get room host for dynamic upstream
|
|
function getQuizRoomHost(r) {
|
|
const roomInfo = JSON.parse(r.variables.room_info);
|
|
return roomInfo.host || '';
|
|
}
|
|
|
|
export default { routeWebSocket, getQuizRoomHost }; |