eventstreams.lua

Mon, 04 Jan 2016 17:03:19 +0000

author
Matthew Wild <mwild1@gmail.com>
date
Mon, 04 Jan 2016 17:03:19 +0000
changeset 18
8050134f35b3
parent 9
7da8b3c95bb1
permissions
-rw-r--r--

clients: Include request in the new-client event

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