From 2ee5beec5872de8d6c96179676eca1208b3f418e Mon Sep 17 00:00:00 2001 From: Jason Woofenden Date: Wed, 25 Jul 2012 17:41:26 -0400 Subject: [PATCH] send a space every 12 seconds for keepalive --- server.coffee | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/server.coffee b/server.coffee index 8e35241..b16f29f 100644 --- a/server.coffee +++ b/server.coffee @@ -30,6 +30,7 @@ max_game_idle = 3 * 60 * 60 * 1000 # three hours (in miliseconds) # timeout function with args in convenient order timeout = (ms, func) -> setTimeout func, ms +interval = (ms, func) -> setInterval func, ms now_s = -> d = new Date() @@ -143,10 +144,10 @@ get_handler = (args, out, request, url_parts) -> return game = games[args.game] + out.writeHead 200, 'Content-Type': 'text/javascript' waiter = games["#{args.agent}_waiter"] if waiter? - waiter.writeHead 200, 'Content-Type': 'text/javascript' waiter.end '[]' game["#{args.agent}_waiter"] = out @@ -211,14 +212,12 @@ answer_now = (game) -> queue = game.p1_queue game.p1_waiter = false game.p1_queue = [] - waiter.writeHead 200, 'Content-Type': 'text/javascript' waiter.end JSON.stringify queue if game.p2_waiter and game.p2_queue.length waiter = game.p2_waiter queue = game.p2_queue game.p2_waiter = false game.p2_queue = [] - waiter.writeHead 200, 'Content-Type': 'text/javascript' waiter.end JSON.stringify queue # this marks a game as "dirty" and makes sure there's exactly one timeout @@ -267,6 +266,15 @@ new_game = (slug) -> return game +long_poll_keepalive = -> + for g of games + if g.p1_waiter + g.p1_waiter.write ' ' + if g.p2_waiter + g.p2_waiter.write ' ' + +interval 12000, long_poll_keepalive + http_server = http.createServer (req, res) -> url_parts = url.parse req.url, true if url_parts.query is undefined -- 1.7.10.4