diff -r 2e4c32c4fb6b -r 7da8b3c95bb1 eventstreams.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eventstreams.lua Mon Jan 04 12:00:03 2016 +0000 @@ -0,0 +1,35 @@ +local stream_methods = {}; +local stream_mt = { __index = stream_methods }; + +local response_head = table.concat({ + "HTTP/1.1 200 OK"; + "Content-Type: text/event-stream"; + ""; + ""; +}, "\r\n"); + +function stream_methods:add_watcher(conn) + conn:write(response_head); + self.watchers[conn] = true; +end + +function stream_methods:remove_watcher(conn) + self.watchers[conn] = nil; +end + +function stream_methods:push(data) + data = "data: "..data:gsub("\n", "\ndata: \n").."\n\n"; + for conn in pairs(self.watchers) do + conn:write(data); + end +end + +function stream_methods:is_unwatched() + return next(self.watchers) == nil; +end + +local function new() + return setmetatable({ watchers = {} }, stream_mt); +end + +return { new = new };