mirror of
https://github.com/http-party/node-http-proxy.git
synced 2025-12-08 20:59:18 +00:00
112 lines
3.3 KiB
JavaScript
112 lines
3.3 KiB
JavaScript
/*
|
|
* ws.js: Top level include for node-http-proxy websocket helpers
|
|
*
|
|
* (C) 2010 Nodejitsu Inc.
|
|
* MIT LICENCE
|
|
*
|
|
*/
|
|
|
|
var assert = require('assert'),
|
|
https = require('https'),
|
|
async = require('async'),
|
|
io = require('socket.io'),
|
|
ws = require('ws'),
|
|
helpers = require('./index'),
|
|
protocols = helpers.protocols,
|
|
http = require('./http');
|
|
|
|
//
|
|
// ### function createServerPair (options, callback)
|
|
// #### @options {Object} Options to create target and proxy server.
|
|
// #### @target {Object} Options for the target server.
|
|
// #### @proxy {Object} Options for the proxy server.
|
|
// #### @callback {function} Continuation to respond to when complete.
|
|
//
|
|
// Creates http target and proxy servers
|
|
//
|
|
exports.createServerPair = function (options, callback) {
|
|
async.series([
|
|
//
|
|
// 1. Create the target server
|
|
//
|
|
function createTarget(next) {
|
|
exports.createServer(options.target, next);
|
|
},
|
|
//
|
|
// 2. Create the proxy server
|
|
//
|
|
function createTarget(next) {
|
|
http.createProxyServer(options.proxy, next);
|
|
}
|
|
], callback);
|
|
};
|
|
|
|
//
|
|
// ### function createServer (options, callback)
|
|
// #### @options {Object} Options for creating the socket.io or ws server.
|
|
// #### @raw {boolean} Enables ws.Websocket server.
|
|
//
|
|
// Creates a socket.io or ws server using the specified `options`.
|
|
//
|
|
exports.createServer = function (options, callback) {
|
|
return options.raw
|
|
? exports.createWsServer(options, callback)
|
|
: exports.createSocketIoServer(options, callback);
|
|
};
|
|
|
|
//
|
|
// ### function createSocketIoServer (options, callback)
|
|
// #### @options {Object} Options for creating the socket.io server
|
|
// #### @port {number} Port to listen on
|
|
// #### @input {string} Input to expect from the only socket
|
|
// #### @output {string} Output to send the only socket
|
|
//
|
|
// Creates a socket.io server on the specified `options.port` which
|
|
// will expect `options.input` and then send `options.output`.
|
|
//
|
|
exports.createSocketIoServer = function (options, callback) {
|
|
var server = protocols.target === 'https'
|
|
? io.listen(options.port, helpers.https, callback)
|
|
: io.listen(options.port, callback);
|
|
|
|
server.sockets.on('connection', function (socket) {
|
|
socket.on('incoming', function (data) {
|
|
assert.equal(data, options.input);
|
|
socket.emit('outgoing', options.output);
|
|
});
|
|
});
|
|
};
|
|
|
|
//
|
|
// ### function createWsServer (options, callback)
|
|
// #### @options {Object} Options for creating the ws.Server instance
|
|
// #### @port {number} Port to listen on
|
|
// #### @input {string} Input to expect from the only socket
|
|
// #### @output {string} Output to send the only socket
|
|
//
|
|
// Creates a ws.Server instance on the specified `options.port` which
|
|
// will expect `options.input` and then send `options.output`.
|
|
//
|
|
exports.createWsServer = function (options, callback) {
|
|
var server,
|
|
wss;
|
|
|
|
if (protocols.target === 'https') {
|
|
server = https.createServer(helpers.https, function (req, res) {
|
|
req.writeHead(200);
|
|
req.end();
|
|
}).listen(options.port, callback);
|
|
|
|
wss = new ws.Server({ server: server });
|
|
}
|
|
else {
|
|
wss = new ws.Server({ port: options.port }, callback);
|
|
}
|
|
|
|
wss.on('connection', function (socket) {
|
|
socket.on('message', function (data) {
|
|
assert.equal(data, options.input);
|
|
socket.send(options.output);
|
|
});
|
|
});
|
|
}; |