import { Handlers } from "$fresh/server.ts"; import { SERVER_STATE } from "../../state/serverState.ts"; import { getActivePlayers } from "../../util/players.ts"; export const handler: Handlers = { GET(_req, _ctx) { let listener: (e: CustomEvent) => void; const body = new ReadableStream({ async start(controller){ console.log('did the thing') if (SERVER_STATE.status !== 'running') return; const players = await getActivePlayers(); const event = `event:players\ndata:${JSON.stringify(players)}\n\n` controller.enqueue(event); console.log('sent the thing') listener = async (e: CustomEvent) => { console.log('message received') if (e.detail.includes('joined the game') || e.detail.includes('lost connection')) { console.log('connection change') const players = await getActivePlayers(); const event = `event: players\ndata: ${JSON.stringify(players)}\n\n` controller.enqueue(event); } } globalThis.addEventListener('stdoutmsg' as any, listener); console.log('listened the thing') }, cancel() { console.log('cancelled') globalThis.removeEventListener('stdoutmsg' as any, listener); } }) return new Response(body.pipeThrough(new TextEncoderStream()), { headers: { "Content-Type": "text/event-stream", "cache-control": "no-cache" }}); } }