rc-web@69: /*! rc-web@69: * socket.io-node rc-web@69: * Copyright(c) 2011 LearnBoost rc-web@69: * MIT Licensed rc-web@69: */ rc-web@69: rc-web@69: /** rc-web@69: * Module requirements. rc-web@69: */ rc-web@69: var WebSocket = require('./websocket'); rc-web@69: rc-web@69: /** rc-web@69: * Export the constructor. rc-web@69: */ rc-web@69: rc-web@69: exports = module.exports = FlashSocket; rc-web@69: rc-web@69: /** rc-web@69: * The FlashSocket transport is just a proxy rc-web@69: * for WebSocket connections. rc-web@69: * rc-web@69: * @api public rc-web@69: */ rc-web@69: rc-web@69: function FlashSocket (mng, data, req) { rc-web@69: return WebSocket.call(this, mng, data, req); rc-web@69: } rc-web@69: rc-web@69: /** rc-web@69: * Inherits from WebSocket. rc-web@69: */ rc-web@69: rc-web@69: FlashSocket.prototype.__proto__ = WebSocket.prototype; rc-web@69: rc-web@69: /** rc-web@69: * Transport name rc-web@69: * rc-web@69: * @api public rc-web@69: */ rc-web@69: rc-web@69: FlashSocket.prototype.name = 'flashsocket'; rc-web@69: rc-web@69: /** rc-web@69: * Listens for new configuration changes of the Manager rc-web@69: * this way we can enable and disable the flash server. rc-web@69: * rc-web@69: * @param {Manager} Manager instance. rc-web@69: * @api private rc-web@69: */ rc-web@69: rc-web@69: rc-web@69: FlashSocket.init = function (manager) { rc-web@69: var server; rc-web@69: function create () { rc-web@69: rc-web@69: // Drop out immediately if the user has rc-web@69: // disabled the flash policy server rc-web@69: if (!manager.get('flash policy server')) { rc-web@69: return; rc-web@69: } rc-web@69: rc-web@69: server = require('policyfile').createServer({ rc-web@69: log: function(msg){ rc-web@69: manager.log.info(msg); rc-web@69: } rc-web@69: }, manager.get('origins')); rc-web@69: rc-web@69: server.on('close', function (e) { rc-web@69: server = null; rc-web@69: }); rc-web@69: rc-web@69: server.listen(manager.get('flash policy port'), manager.server); rc-web@69: rc-web@69: manager.flashPolicyServer = server; rc-web@69: } rc-web@69: rc-web@69: // listen for origin changes, so we can update the server rc-web@69: manager.on('set:origins', function (value, key) { rc-web@69: if (!server) return; rc-web@69: rc-web@69: // update the origins and compile a new response buffer rc-web@69: server.origins = Array.isArray(value) ? value : [value]; rc-web@69: server.compile(); rc-web@69: }); rc-web@69: rc-web@69: // destory the server and create a new server rc-web@69: manager.on('set:flash policy port', function (value, key) { rc-web@69: var transports = manager.get('transports'); rc-web@69: if (~transports.indexOf('flashsocket')) { rc-web@69: if (server) { rc-web@69: if (server.port === value) return; rc-web@69: // destroy the server and rebuild it on a new port rc-web@69: try { rc-web@69: server.close(); rc-web@69: } rc-web@69: catch (e) { /* ignore exception. could e.g. be that the server isn't started yet */ } rc-web@69: } rc-web@69: create(); rc-web@69: } rc-web@69: }); rc-web@69: rc-web@69: // create or destroy the server rc-web@69: manager.on('set:flash policy server', function (value, key) { rc-web@69: var transports = manager.get('transports'); rc-web@69: if (~transports.indexOf('flashsocket')) { rc-web@69: if (server && !value) { rc-web@69: // destroy the server rc-web@69: try { rc-web@69: server.close(); rc-web@69: } rc-web@69: catch (e) { /* ignore exception. could e.g. be that the server isn't started yet */ } rc-web@69: } rc-web@69: } else if (!server && value) { rc-web@69: // create the server rc-web@69: create(); rc-web@69: } rc-web@69: }); rc-web@69: rc-web@69: // only start the server rc-web@69: manager.on('set:transports', function (value, key){ rc-web@69: if (!server && ~manager.get('transports').indexOf('flashsocket')) { rc-web@69: create(); rc-web@69: } rc-web@69: }); rc-web@69: // check if we need to initialize at start rc-web@69: if (~manager.get('transports').indexOf('flashsocket')){ rc-web@69: create(); rc-web@69: } rc-web@69: };