changed api names to make them more fitting, incase i want a player endpoint later

This commit is contained in:
2026-05-23 20:14:38 +01:00
parent 8879c943a4
commit dff0d9441f
4 changed files with 84 additions and 91 deletions

View File

@@ -1,46 +0,0 @@
import { globalEmitter, getPlayers } from '$lib/server/eventManager';
// Expose endpoint
export async function GET() {
// expose function type to both start and cancel
let playerList: () => Promise<void>;
// When request recieved open a new websocket
const stream = new ReadableStream({
// Make a new controller so I can send messages
async start(controller) {
// Function for sending messages
const enqueue = (data: any) => {
let transferdata = JSON.stringify(data);
// stringify data and add to controller queue
controller.enqueue(`data: ${transferdata}\n\n`);
};
// Function to grab score from database and add it to message queue
playerList = async () => {
let players = await getPlayers();
enqueue(players);
};
// Update score on connection so everything is synced
enqueue(await getPlayers());
// Update score every time the emitter emits that the score has been changed
globalEmitter.on('playerUpdate', playerList);
},
cancel() {
// Delete the emitter listener so that the server doesnt crash
globalEmitter.off('playerUpdate', playerList);
console.log('closed');
}
});
// Return a response with an eventstream mime type
return new Response(stream, {
headers: {
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache',
Connection: 'keep-alive',
'X-Accel-Buffering': 'no'
}
});
}

View File

@@ -0,0 +1,54 @@
import {
globalEmitter,
getRegisteredEvents,
getAllRegisteredEventPlayers
} from '$lib/server/eventManager';
import { generateEndpoint } from '$lib/server/endpoint';
export async function GET() {
// Generate stream endpoint
const endpoint = generateEndpoint(async (enqueue) => {
const eventList = async () => {
// Get updated events from database
let newEvents = await getRegisteredEvents();
let registeredEventList = newEvents['events'];
let fullEventList: any[] = [];
// For every event
for (let registeredEvent in registeredEventList) {
let event = registeredEventList[registeredEvent];
// Get all players for the event
let registeredPlayers = await getAllRegisteredEventPlayers(event.id);
// Some nonsense to extract the players into a better object
let registeredPlayersVec: any[] = [];
for (let player in registeredPlayers.eventPlayers) {
let currentPlayer = registeredPlayers.eventPlayers[player];
registeredPlayersVec.push(currentPlayer);
}
// add registeredPlayers as part of the event object
let eventWithPlayers = {
...event,
registeredPlayers: registeredPlayersVec
};
// combine all of the events into one array
fullEventList.push(eventWithPlayers);
}
// Send to client
enqueue(fullEventList);
};
// Initial Sync
eventList();
globalEmitter.on('eventUpdate', eventList);
// Simply return the cleanup function here
return () => {
globalEmitter.off('eventUpdate', eventList);
};
});
return (await endpoint).response;
}

View File

@@ -0,0 +1,9 @@
import { globalEmitter, getAllRegisteredEventPlayers } from '$lib/server/eventManager';
import { generateEndpoint } from '$lib/server/endpoint';
// Expose post request
export async function POST({ request }: any) {
// When post request recieved increment testscores by 1
// Return ok so the frontend is happy
return new Response('ok');
}

View File

@@ -1,49 +1,5 @@
import { globalEmitter, getTeams } from '$lib/server/eventManager'; import { globalEmitter, getTeams } from '$lib/server/eventManager';
import { generateEndpoint } from '$lib/server/endpoint';
// Expose endpoint
export async function GET() {
// expose function type to both start and cancel
let newScore: () => Promise<void>;
// When request recieved open a new websocket
const stream = new ReadableStream({
// Make a new controller so I can send messages
start(controller) {
// Function for sending messages
const enqueue = (data: any) => {
let transferdata = JSON.stringify(data);
// stringify data and add to controller queue
controller.enqueue(`data: ${transferdata}\n\n`);
};
// Function to grab score from database and add it to message queue
newScore = async () => {
let newScores = await getTeams();
enqueue(newScores);
};
// Update score on connection so everything is synced
enqueue(getTeams());
// Update score every time the emitter emits that the score has been changed
globalEmitter.on('scoreUpdate', newScore);
},
cancel() {
// Delete the emitter listener so that the server doesnt crash
globalEmitter.off('scoreUpdate', newScore);
console.log('closed');
}
});
// Return a response with an eventstream mime type
return new Response(stream, {
headers: {
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache',
Connection: 'keep-alive',
'X-Accel-Buffering': 'no'
}
});
}
// Expose post request // Expose post request
export async function POST({ request }: any) { export async function POST({ request }: any) {
@@ -52,3 +8,23 @@ export async function POST({ request }: any) {
// Return ok so the frontend is happy // Return ok so the frontend is happy
return new Response('ok'); return new Response('ok');
} }
export async function GET() {
const endpoint = generateEndpoint(async (enqueue) => {
// Function to grab score from database and add it to message queue
let newScore = async () => {
let newScores = await getTeams();
enqueue(newScores);
};
// Initial Sync
newScore();
globalEmitter.on('scoreUpdate', newScore);
// Simply return the cleanup function here
return () => {
globalEmitter.off('scoreUpdate', newScore);
};
});
return (await endpoint).response;
}