// Generated by CoffeeScript 1.12.7 (function() { var XhrPollingReceiver, XhrStreamingReceiver, transport, utils, extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, hasProp = {}.hasOwnProperty; transport = require('./transport'); utils = require('./utils'); XhrStreamingReceiver = (function(superClass) { extend(XhrStreamingReceiver, superClass); function XhrStreamingReceiver() { return XhrStreamingReceiver.__super__.constructor.apply(this, arguments); } XhrStreamingReceiver.prototype.protocol = "xhr-streaming"; XhrStreamingReceiver.prototype.doSendFrame = function(payload) { return XhrStreamingReceiver.__super__.doSendFrame.call(this, payload + '\n'); }; return XhrStreamingReceiver; })(transport.ResponseReceiver); XhrPollingReceiver = (function(superClass) { extend(XhrPollingReceiver, superClass); function XhrPollingReceiver() { return XhrPollingReceiver.__super__.constructor.apply(this, arguments); } XhrPollingReceiver.prototype.protocol = "xhr-polling"; XhrPollingReceiver.prototype.max_response_size = 1; return XhrPollingReceiver; })(XhrStreamingReceiver); exports.app = { xhr_options: function(req, res) { res.statusCode = 204; res.setHeader('Access-Control-Allow-Methods', 'OPTIONS, POST'); res.setHeader('Access-Control-Max-Age', res.cache_for); return ''; }, xhr_send: function(req, res, data) { var d, i, jsonp, len, message, x; if (!data) { throw { status: 500, message: 'Payload expected.' }; } try { d = JSON.parse(data); } catch (error) { x = error; throw { status: 500, message: 'Broken JSON encoding.' }; } if (!d || d.__proto__.constructor !== Array) { throw { status: 500, message: 'Payload expected.' }; } jsonp = transport.Session.bySessionId(req.session); if (!jsonp) { throw { status: 404 }; } for (i = 0, len = d.length; i < len; i++) { message = d[i]; jsonp.didMessage(message); } res.setHeader('Content-Type', 'text/plain; charset=UTF-8'); res.writeHead(204); res.end(); return true; }, xhr_cors: function(req, res, content) { var headers, origin; if (this.options.disable_cors) { return content; } if (!req.headers['origin']) { origin = '*'; } else { origin = req.headers['origin']; res.setHeader('Access-Control-Allow-Credentials', 'true'); } res.setHeader('Access-Control-Allow-Origin', origin); res.setHeader('Vary', 'Origin'); headers = req.headers['access-control-request-headers']; if (headers) { res.setHeader('Access-Control-Allow-Headers', headers); } return content; }, xhr_poll: function(req, res, _, next_filter) { res.setHeader('Content-Type', 'application/javascript; charset=UTF-8'); res.writeHead(200); transport.register(req, this, new XhrPollingReceiver(req, res, this.options)); return true; }, xhr_streaming: function(req, res, _, next_filter) { res.setHeader('Content-Type', 'application/javascript; charset=UTF-8'); res.writeHead(200); res.write(Array(2049).join('h') + '\n'); transport.register(req, this, new XhrStreamingReceiver(req, res, this.options)); return true; } }; }).call(this);