Skip to content

Commit

Permalink
Make websocket.js handle both websocket modules
Browse files Browse the repository at this point in the history
  • Loading branch information
dhruvbird committed Mar 22, 2012
1 parent d5d4ab0 commit d532cf8
Showing 1 changed file with 50 additions and 10 deletions.
60 changes: 50 additions & 10 deletions src/websocket.js
Expand Up @@ -25,7 +25,6 @@


var http = require('http');
var ws = require('websocket-server');
var ltx = require('ltx');
var util = require('util');
var uuid = require('node-uuid');
Expand Down Expand Up @@ -56,7 +55,8 @@ const STREAM_OPENED = 2;
// https://github.com/superfeedr/strophejs/tree/protocol-ed
//

exports.createServer = function(bosh_server) {
exports.createServer = function(bosh_server, webSocket) {
webSocket = webSocket || require('websocket-server');

// State information for XMPP streams
var sn_state = { };
Expand All @@ -81,8 +81,41 @@ exports.createServer = function(bosh_server) {

var wsep = new WebSocketEventPipe(bosh_server);

var websocket_server = ws.createServer({
server: bosh_server.server,
var connect_event = '';
var send_proc = '';
var createWebSocketServer = '';

function setWSSpecificParameters(webSocket) {
if (webSocket.createServer) {
connect_event = 'connection';
send_proc = function(conn, data) {
return conn.send(data);
};
createWebSocketServer = function(options) {
return webSocket.createServer(options);
};
} else {
connect_event = 'connect';
send_proc = function(conn, data) {
return conn.sendUTF(data);
};
createWebSocketServer = function(options) {
return new webSocket.server(options);
};
}
}

setWSSpecificParameters(webSocket);

var websocket_server = createWebSocketServer({
// For draft-10
httpServer: bosh_server.server,
autoAcceptConnections: true,

// For pre-draft-10
server: bosh_server.server,

// Common to both
subprotocol: 'xmpp'
});

Expand All @@ -97,14 +130,14 @@ exports.createServer = function(bosh_server) {
'xml:lang': 'en',
'from': to
}).toString();
sstate.conn.send(ss_xml);
send_proc(sstate.conn, ss_xml);
});

wsep.on('response', function(response, sstate) {
// Send the data back to the client

// TODO: Handle send() failed
sstate.conn.send(response.toString());
send_proc(sstate.conn, response.toString());
});

wsep.on('terminate', function(sstate, had_error) {
Expand All @@ -118,7 +151,7 @@ exports.createServer = function(bosh_server) {
sstate.conn.close();
});

websocket_server.on('connection', function(conn) {
websocket_server.on(connect_event, function(conn) {
var stream_name = uuid();

// Note: xmpp-proxy.js relies on the session object
Expand All @@ -144,7 +177,15 @@ exports.createServer = function(bosh_server) {
sn_state[stream_name] = sstate;

conn.on('message', function(message) {
message = '<dummy>' + message + '</dummy>';
if (!message.type || (message.type && message.type === 'utf8')) {
message = '<dummy>' + message + '</dummy>';
}

if (message.type && message.type === 'binary') {
console.log("Binary not supported..."); // TODO use log4js
return;
}

log.debug("%s - Processing: %s", stream_name, message);

// XML parse the message
Expand Down Expand Up @@ -179,8 +220,7 @@ exports.createServer = function(bosh_server) {

sstate.to = ss_node.attrs.to;
wsep.emit('stream-add', sstate, ss_node.attrs);
}
else if (sstate.stream_state === STREAM_OPENED) {
} else if (sstate.stream_state === STREAM_OPENED) {
// Restart the current stream
wsep.emit('stream-restart', sstate, ss_node.attrs);
}
Expand Down

0 comments on commit d532cf8

Please sign in to comment.