clients.lua

Mon, 04 Jan 2016 11:44:19 +0000

author
Matthew Wild <mwild1@gmail.com>
date
Mon, 04 Jan 2016 11:44:19 +0000
changeset 7
59655d6c45b3
parent 6
4e46ef3035ba
child 8
2e4c32c4fb6b
permissions
-rw-r--r--

client.lua: Add /watchers endpoint to get the current number of people watching the feed

0
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1 local socket = require "socket";
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2 local server = require "net.server_select";
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3 local http_server = require"net.http.server";
6
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
4 local new_uuid = require "util.uuid".generate;
0
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5 local log = require "util.logger".init("clients");
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7 local response_head = table.concat({
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8 "HTTP/1.1 200 OK";
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9 "Max-Age: 0";
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10 "Expires: 0";
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11 "Cache-Control: no-cache, private";
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
12 "Pragma: no-cache";
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
13 "Content-Type: multipart/x-mixed-replace; boundary=--BoundaryString";
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
14 "Keep-Alive: timeout=5, max=99";
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
15 "Connection: Keep-Alive";
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
16 "Transfer-Encoding: chunked";
6
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
17 "Set-Cookie: COOKIE_STRING";
0
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
18 "";
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
19 "";
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
20 }, "\r\n");
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
21
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
22 local listener = { onconnect = function () end; onincoming = function () end; }
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
23
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
24 local last_chunk;
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
25
6
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
26 local have_clients = false;
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
27
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
28 -- [conn] = cookie
0
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
29 local clients = {};
6
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
30 -- [cookie] = conn
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
31 local client_by_cookie = {};
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
32 -- [conn] = last_active_timestamp
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
33 local active_clients = {};
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
34
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
35 local activity_timeout = 20;
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
36
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
37 local function update_have_clients()
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
38 if have_clients and not next(active_clients) then
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
39 have_clients = false;
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
40 log("debug", "No more clients");
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
41 events.fire_event("no-clients");
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
42 elseif not have_clients and next(active_clients) then
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
43 have_clients = true;
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
44 log("debug", "Active clients");
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
45 events.fire_event("have-clients");
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
46 end
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
47 end
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
48
0
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
49
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
50 -- Called when a HTTP stream client closes
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
51 function listener.ondisconnect(conn)
6
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
52 client_by_cookie[clients[conn]] = nil;
0
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
53 clients[conn] = nil;
6
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
54 active_clients[conn] = nil;
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
55 update_have_clients();
0
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
56 end
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
57 listener.ondetach = listener.ondisconnect;
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
58
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
59 function handle_request(event, path)
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
60 local path = event.request.url.path;
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
61 if path ~= "/cam" then
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
62 return 404;
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
63 end
6
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
64
0
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
65 local conn = event.response.conn;
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
66
6
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
67 local cookie = event.request.headers.cookie;
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
68 if cookie then
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
69 log("debug", "Client %s connected", cookie);
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
70 else
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
71 cookie = new_uuid();
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
72 log("debug", "New client connected, assigned %s", cookie);
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
73 end
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
74 conn:write((response_head:gsub("COOKIE_STRING", cookie)));
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
75 clients[conn] = cookie;
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
76 active_clients[conn] = os.time();
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
77 client_by_cookie[cookie] = conn;
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
78
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
79 update_have_clients();
0
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
80
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
81 if last_chunk then
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
82 conn:write(last_chunk);
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
83 end
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
84
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
85 conn:setlistener(listener);
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
86
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
87 return true;
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
88 end
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
89
6
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
90 local function mark_active(request)
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
91 local cookie = event.request.headers.cookie;
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
92 if not cookie then
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
93 log("warn", "Active client with no cookie");
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
94 return;
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
95 end
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
96 local conn = client_by_cookie[cookie];
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
97 if not conn then
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
98 log("warn", "Active client with no connection");
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
99 return;
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
100 end
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
101 active_clients[conn] = os.time();
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
102 update_have_clients();
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
103 end
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
104
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
105 function handle_active(event, path)
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
106 mark_active(event.request);
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
107 return "OK";
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
108 end
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
109
7
59655d6c45b3 client.lua: Add /watchers endpoint to get the current number of people watching the feed
Matthew Wild <mwild1@gmail.com>
parents: 6
diff changeset
110 function handle_watchers(event)
59655d6c45b3 client.lua: Add /watchers endpoint to get the current number of people watching the feed
Matthew Wild <mwild1@gmail.com>
parents: 6
diff changeset
111 local active, total = 0, 0;
59655d6c45b3 client.lua: Add /watchers endpoint to get the current number of people watching the feed
Matthew Wild <mwild1@gmail.com>
parents: 6
diff changeset
112 for client in pairs(clients) do
59655d6c45b3 client.lua: Add /watchers endpoint to get the current number of people watching the feed
Matthew Wild <mwild1@gmail.com>
parents: 6
diff changeset
113 total = total + 1;
59655d6c45b3 client.lua: Add /watchers endpoint to get the current number of people watching the feed
Matthew Wild <mwild1@gmail.com>
parents: 6
diff changeset
114 if active_clients[client] then
59655d6c45b3 client.lua: Add /watchers endpoint to get the current number of people watching the feed
Matthew Wild <mwild1@gmail.com>
parents: 6
diff changeset
115 active = active + 1;
59655d6c45b3 client.lua: Add /watchers endpoint to get the current number of people watching the feed
Matthew Wild <mwild1@gmail.com>
parents: 6
diff changeset
116 end
59655d6c45b3 client.lua: Add /watchers endpoint to get the current number of people watching the feed
Matthew Wild <mwild1@gmail.com>
parents: 6
diff changeset
117 end
59655d6c45b3 client.lua: Add /watchers endpoint to get the current number of people watching the feed
Matthew Wild <mwild1@gmail.com>
parents: 6
diff changeset
118 mark_active(event.request);
59655d6c45b3 client.lua: Add /watchers endpoint to get the current number of people watching the feed
Matthew Wild <mwild1@gmail.com>
parents: 6
diff changeset
119 return tostring(total);
59655d6c45b3 client.lua: Add /watchers endpoint to get the current number of people watching the feed
Matthew Wild <mwild1@gmail.com>
parents: 6
diff changeset
120 end
59655d6c45b3 client.lua: Add /watchers endpoint to get the current number of people watching the feed
Matthew Wild <mwild1@gmail.com>
parents: 6
diff changeset
121
0
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
122 events.add_handler("image-changed", function (event)
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
123 log("debug", "New image");
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
124 local chunk_data = table.concat({
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
125 "--BoundaryString",
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
126 "Content-Type: image/jpeg";
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
127 "Content-Length: "..#event.image;
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
128 "";
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
129 event.image;
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
130 }, "\r\n");
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
131 last_chunk = ("%x\r\n%s\r\n"):format(#chunk_data, chunk_data);
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
132
6
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
133 local time_now = os.time();
0
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
134 for client in pairs(clients) do
6
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
135 local active_time = active_clients[client];
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
136 if active_time and time_now - active_time < activity_timeout then
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
137 client:write(last_chunk);
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
138 else
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
139 active_clients[client] = nil;
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
140 end
0
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
141 end
6
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
142 update_have_clients();
0
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
143 end);
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
144
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
145 http_server.add_host("localhost");
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
146 http_server.set_default_host("localhost");
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
147 http_server.add_handler("GET localhost/*", handle_request);
6
4e46ef3035ba clients.lua: Add client activity tracking
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
148 http_server.add_handler("GET localhost/active", handle_active);
7
59655d6c45b3 client.lua: Add /watchers endpoint to get the current number of people watching the feed
Matthew Wild <mwild1@gmail.com>
parents: 6
diff changeset
149 http_server.add_handler("GET localhost/watchers", handle_watchers);
0
d363a6692a10 Initial commit. Tortoises are fun.
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
150 http_server.listen_on(8006);

mercurial