rc-web@69
|
1 /*!
|
rc-web@69
|
2 * socket.io-node
|
rc-web@69
|
3 * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
|
rc-web@69
|
4 * MIT Licensed
|
rc-web@69
|
5 */
|
rc-web@69
|
6
|
rc-web@69
|
7 /**
|
rc-web@69
|
8 * Module requirements.
|
rc-web@69
|
9 */
|
rc-web@69
|
10 var WebSocket = require('./websocket');
|
rc-web@69
|
11
|
rc-web@69
|
12 /**
|
rc-web@69
|
13 * Export the constructor.
|
rc-web@69
|
14 */
|
rc-web@69
|
15
|
rc-web@69
|
16 exports = module.exports = FlashSocket;
|
rc-web@69
|
17
|
rc-web@69
|
18 /**
|
rc-web@69
|
19 * The FlashSocket transport is just a proxy
|
rc-web@69
|
20 * for WebSocket connections.
|
rc-web@69
|
21 *
|
rc-web@69
|
22 * @api public
|
rc-web@69
|
23 */
|
rc-web@69
|
24
|
rc-web@69
|
25 function FlashSocket (mng, data, req) {
|
rc-web@69
|
26 return WebSocket.call(this, mng, data, req);
|
rc-web@69
|
27 }
|
rc-web@69
|
28
|
rc-web@69
|
29 /**
|
rc-web@69
|
30 * Inherits from WebSocket.
|
rc-web@69
|
31 */
|
rc-web@69
|
32
|
rc-web@69
|
33 FlashSocket.prototype.__proto__ = WebSocket.prototype;
|
rc-web@69
|
34
|
rc-web@69
|
35 /**
|
rc-web@69
|
36 * Transport name
|
rc-web@69
|
37 *
|
rc-web@69
|
38 * @api public
|
rc-web@69
|
39 */
|
rc-web@69
|
40
|
rc-web@69
|
41 FlashSocket.prototype.name = 'flashsocket';
|
rc-web@69
|
42
|
rc-web@69
|
43 /**
|
rc-web@69
|
44 * Listens for new configuration changes of the Manager
|
rc-web@69
|
45 * this way we can enable and disable the flash server.
|
rc-web@69
|
46 *
|
rc-web@69
|
47 * @param {Manager} Manager instance.
|
rc-web@69
|
48 * @api private
|
rc-web@69
|
49 */
|
rc-web@69
|
50
|
rc-web@69
|
51
|
rc-web@69
|
52 FlashSocket.init = function (manager) {
|
rc-web@69
|
53 var server;
|
rc-web@69
|
54 function create () {
|
rc-web@69
|
55
|
rc-web@69
|
56 // Drop out immediately if the user has
|
rc-web@69
|
57 // disabled the flash policy server
|
rc-web@69
|
58 if (!manager.get('flash policy server')) {
|
rc-web@69
|
59 return;
|
rc-web@69
|
60 }
|
rc-web@69
|
61
|
rc-web@69
|
62 server = require('policyfile').createServer({
|
rc-web@69
|
63 log: function(msg){
|
rc-web@69
|
64 manager.log.info(msg);
|
rc-web@69
|
65 }
|
rc-web@69
|
66 }, manager.get('origins'));
|
rc-web@69
|
67
|
rc-web@69
|
68 server.on('close', function (e) {
|
rc-web@69
|
69 server = null;
|
rc-web@69
|
70 });
|
rc-web@69
|
71
|
rc-web@69
|
72 server.listen(manager.get('flash policy port'), manager.server);
|
rc-web@69
|
73
|
rc-web@69
|
74 manager.flashPolicyServer = server;
|
rc-web@69
|
75 }
|
rc-web@69
|
76
|
rc-web@69
|
77 // listen for origin changes, so we can update the server
|
rc-web@69
|
78 manager.on('set:origins', function (value, key) {
|
rc-web@69
|
79 if (!server) return;
|
rc-web@69
|
80
|
rc-web@69
|
81 // update the origins and compile a new response buffer
|
rc-web@69
|
82 server.origins = Array.isArray(value) ? value : [value];
|
rc-web@69
|
83 server.compile();
|
rc-web@69
|
84 });
|
rc-web@69
|
85
|
rc-web@69
|
86 // destory the server and create a new server
|
rc-web@69
|
87 manager.on('set:flash policy port', function (value, key) {
|
rc-web@69
|
88 var transports = manager.get('transports');
|
rc-web@69
|
89 if (~transports.indexOf('flashsocket')) {
|
rc-web@69
|
90 if (server) {
|
rc-web@69
|
91 if (server.port === value) return;
|
rc-web@69
|
92 // destroy the server and rebuild it on a new port
|
rc-web@69
|
93 try {
|
rc-web@69
|
94 server.close();
|
rc-web@69
|
95 }
|
rc-web@69
|
96 catch (e) { /* ignore exception. could e.g. be that the server isn't started yet */ }
|
rc-web@69
|
97 }
|
rc-web@69
|
98 create();
|
rc-web@69
|
99 }
|
rc-web@69
|
100 });
|
rc-web@69
|
101
|
rc-web@69
|
102 // create or destroy the server
|
rc-web@69
|
103 manager.on('set:flash policy server', function (value, key) {
|
rc-web@69
|
104 var transports = manager.get('transports');
|
rc-web@69
|
105 if (~transports.indexOf('flashsocket')) {
|
rc-web@69
|
106 if (server && !value) {
|
rc-web@69
|
107 // destroy the server
|
rc-web@69
|
108 try {
|
rc-web@69
|
109 server.close();
|
rc-web@69
|
110 }
|
rc-web@69
|
111 catch (e) { /* ignore exception. could e.g. be that the server isn't started yet */ }
|
rc-web@69
|
112 }
|
rc-web@69
|
113 } else if (!server && value) {
|
rc-web@69
|
114 // create the server
|
rc-web@69
|
115 create();
|
rc-web@69
|
116 }
|
rc-web@69
|
117 });
|
rc-web@69
|
118
|
rc-web@69
|
119 // only start the server
|
rc-web@69
|
120 manager.on('set:transports', function (value, key){
|
rc-web@69
|
121 if (!server && ~manager.get('transports').indexOf('flashsocket')) {
|
rc-web@69
|
122 create();
|
rc-web@69
|
123 }
|
rc-web@69
|
124 });
|
rc-web@69
|
125 // check if we need to initialize at start
|
rc-web@69
|
126 if (~manager.get('transports').indexOf('flashsocket')){
|
rc-web@69
|
127 create();
|
rc-web@69
|
128 }
|
rc-web@69
|
129 };
|