UNPKG

willcore.sse

Version:

WillCore.UI expansion module to enable server-side events.

36 lines (34 loc) 1.38 kB
class sseContainer { constructor(sessionLogic) { this.sseResponses = {}; this.sessionLogic = sessionLogic; this.keepAliveTimeout = 60000; } register(response, request) { let sessionObject = this.sessionLogic.getCookieObject(request, response); if (!sessionObject || !sessionObject.id) return false; request.ended = true;//keeps the request from ending. let sessionId = sessionObject.id; this.sseResponses[sessionId] = this.sseResponses[sessionId] || []; this.sseResponses[sessionId].push(response); //writes the head response.writeHead(200, { 'Content-Type': 'text/event-stream', 'Cache-Control': 'private, no-cache, no-store, must-revalidate', 'Connection': 'keep-alive', 'transfer-encoding': '' }); //set the timeout setTimeout(() => { let responseList = this.sseResponses[sessionId]; if (responseList) { delete this.sseResponses[sessionId]; responseList.forEach(responseItem => { responseItem.write(`event: keepAlive\ndata: keepAlive\n\n\n`); responseItem.end(); }); } }, this.keepAliveTimeout); } } module.exports = sseContainer;