diff --git a/server/app.js b/server/app.js index 11a109843..e06fda2a5 100644 --- a/server/app.js +++ b/server/app.js @@ -37,7 +37,7 @@ import bodyParser from 'body-parser'; import cookieParser from 'cookie-parser'; import forceSSL from './forcessl.mw.js'; -import EventEmitter from 'events'; +import Stream from './eventStreamSource.js'; const sanitizeBrew = (brew, accessType)=>{ @@ -514,27 +514,27 @@ app.get('/account', asyncHandler(async (req, res, next)=>{ return next(); })); -// Event Stream -const Stream = new EventEmitter; - -// After Stream starts, send initStream event -setTimeout(()=>{ - Stream.emit('push', 'initStream', { time: (new Date).toString() }); -}, 1000); - +// Create Event Stream source for pages to listen to app.get('/stream', (req, res)=>{ res.writeHead(200, { - 'Content-Type' : 'text/event-stream', - 'Cache-Control' : 'no-cache', - 'Connection' : 'keep-alive' + 'Content-Type' : 'text/event-stream', + 'Cache-Control' : 'no-cache', + 'Connection' : 'keep-alive', + 'Content-Encoding' : 'none' }); - Stream.on('push', (event, data)=>{ - // console.log('Event:', event, 'Data:', data); + Stream.on('sendUpdate', (event, data)=>{ + console.log('Event:', event, '\nData:', data); res.write(`data: ${JSON.stringify({ ...data, eventType: event })}\n\n`); }); }); +// After Stream starts, send initStream event +setTimeout(()=>{ + Stream.emit('sendUpdate', 'initStream', { time: new Date }); +}, 1000); + + // Local only if(isLocalEnvironment){ // Login diff --git a/server/eventStreamSource.js b/server/eventStreamSource.js new file mode 100644 index 000000000..66fdb3354 --- /dev/null +++ b/server/eventStreamSource.js @@ -0,0 +1,9 @@ +import { EventEmitter } from 'events'; + +const Stream = new EventEmitter; + +export default { + emit : function(event) {return Stream.emit(event, ...([...arguments].slice(1)));}, // Arguments doesn't work for arrow functions + on : (event, listener)=>{return Stream.on(event, listener);}, + off : (event, listener)=>{return Stream.off(event, listener);} +}; \ No newline at end of file