eventstreams.lua

changeset 9
7da8b3c95bb1
--- /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 };

mercurial