Initial pass at individual brew streams

This commit is contained in:
G.Ambatte
2026-10-07 00:07:56 +13:00
parent aeea09b6f3
commit 885feb31b0
2 changed files with 17 additions and 7 deletions
@@ -54,12 +54,13 @@ const SharePage = (props)=>{
fetchThemeBundle(undefined, setThemeBundle, currentBrew.renderer, currentBrew.theme); fetchThemeBundle(undefined, setThemeBundle, currentBrew.renderer, currentBrew.theme);
// listen for changes in the brew version // listen for changes in the brew version
const eventSource = new EventSource('/stream'); const eventSource = new EventSource(`/stream/${props.brew.shareId}`);
eventSource.addEventListener('message', (evt)=>{ eventSource.addEventListener('message', (evt)=>{
const messageData = JSON.parse(evt.data); const messageData = JSON.parse(evt.data);
if(messageData.eventType == 'brewUpdated'){ if(messageData.eventType == 'brewUpdated'){
if(messageData.shareId == currentBrew.shareId && messageData.version != currentBrew.version) { // Share ID check no longer required
if(messageData.version != currentBrew.version) {
console.log('should fetch brew'); console.log('should fetch brew');
fetchUpdatedBrew(); fetchUpdatedBrew();
} }
@@ -68,7 +69,8 @@ const SharePage = (props)=>{
return ()=>{ return ()=>{
document.removeEventListener('keydown', handleControlKeys); document.removeEventListener('keydown', handleControlKeys);
eventSource.close(); eventSource.removeEventListener('message');
// eventSource.close();
}; };
}, []); }, []);
+12 -4
View File
@@ -196,19 +196,27 @@ export default async function createApp(vite) {
// Create Event Stream source for pages to listen to // Create Event Stream source for pages to listen to
let initStreamListener = false; let initStreamListener = false;
app.get('/stream', (req, res)=>{ app.get('/stream/:id', (req, res)=>{
const id = req.params.id;
res.writeHead(200, { res.writeHead(200, {
'Content-Type' : 'text/event-stream', 'Content-Type' : 'text/event-stream',
'Cache-Control' : 'no-cache', 'Cache-Control' : 'no-cache, no-transform',
'Connection' : 'keep-alive', 'Connection' : 'keep-alive',
'Content-Encoding' : 'none' 'Content-Encoding' : 'none'
}); });
res.write(`data: ${JSON.stringify({ init: Date.now().toString(), shareId: id, eventType: 'message' })}\n\n`);
if(!initStreamListener){ if(!initStreamListener){
initStreamListener = true; initStreamListener = true;
Stream.on('sendUpdate', (event, data)=>{ Stream.on('sendUpdate', (event, data)=>{
if(isLocalEnvironment) { console.log('Event:', event, '\nData:', data); } if(isLocalEnvironment) {
res.write(`data: ${JSON.stringify({ ...data, eventType: event })}\n\n`); console.log('Event:', event, '\nData:', data);
}
if(id == data.shareId) {
res.write(`data: ${JSON.stringify({ ...data, eventType: event })}\n\n`);
};
}); });
} }
}); });