changed api names to make them more fitting, incase i want a player endpoint later
This commit is contained in:
@@ -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'
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
54
src/routes/api/registeredEvents/+server.ts
Normal file
54
src/routes/api/registeredEvents/+server.ts
Normal 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;
|
||||||
|
}
|
||||||
9
src/routes/api/registeredPlayers/+server.ts
Normal file
9
src/routes/api/registeredPlayers/+server.ts
Normal 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');
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user