diff --git a/lib/channel/channel.js b/lib/channel/channel.js index 5f0e6fed..f13ef131 100644 --- a/lib/channel/channel.js +++ b/lib/channel/channel.js @@ -609,9 +609,7 @@ Channel.prototype.handleReadLog = function (user) { }; Channel.prototype._broadcast = function (msg, data, ns) { - sio.ioServers.forEach(function (io) { - io.sockets.in(ns).emit(msg, data); - }); + sio.instance.in(ns).emit(msg, data); }; Channel.prototype.broadcastAll = function (msg, data) { diff --git a/lib/io/ioserver.js b/lib/io/ioserver.js index 5a2af30e..fed1e703 100644 --- a/lib/io/ioserver.js +++ b/lib/io/ioserver.js @@ -26,14 +26,16 @@ var ipCount = {}; /** * Called before an incoming socket.io connection is accepted. */ -function handleAuth(data, accept) { - data.user = false; +function handleAuth(socket, accept) { + var data = socket.request; + + socket.user = false; if (data.headers.cookie) { cookieParser(data, null, function () { var auth = data.cookies.auth; db.users.verifyAuth(auth, function (err, user) { if (!err) { - data.user = { + socket.user = { name: user.name, global_rank: user.global_rank }; @@ -159,10 +161,10 @@ function handleConnection(sock) { addTypecheckedFunctions(sock); var user = new User(sock); - if (sockUser) { + if (sock.user) { user.setFlag(Flags.U_REGISTERED); user.clearFlag(Flags.U_READY); - user.refreshAccount({ name: sockUser.name }, + user.refreshAccount({ name: sock.user.name }, function (err, account) { if (err) { user.clearFlag(Flags.U_REGISTERED); @@ -190,44 +192,30 @@ function handleConnection(sock) { module.exports = { init: function (srv) { + var bound = {}; + var io = sio.instance = sio(); + + io.use(handleAuth); + io.on("connection", handleConnection); + Config.get("listen").forEach(function (bind) { if (!bind.io) { return; } var id = bind.ip + ":" + bind.port; - if (id in srv.ioServers) { + if (id in bound) { Logger.syslog.log("[WARN] Ignoring duplicate listen address " + id); return; } - var io = null; if (id in srv.servers) { - io = srv.ioServers[id] = sio.listen(srv.servers[id]); + io.attach(srv.servers[id]); } else { - if (net.isIPv6(bind.ip) || bind.ip === "::") { - /** - * Socket.IO won't bind to a v6 address natively. - * Instead, we have to create a node HTTP server, bind it - * to the desired address, then have socket.io listen on it - */ - io = srv.ioServers[id] = sio.listen( - require("http").createServer().listen(bind.port, bind.ip) - ); - } else { - io = srv.ioServers[id] = sio.listen(bind.port, bind.ip); - } + io.attach(require("http").createServer().listen(bind.port, bind.ip)); } - if (io) { - io.set("log level", 1); - io.set("authorization", handleAuth); - io.on("connection", handleConnection); - } + bound[id] = null; }); - - sio.ioServers = Object.keys(srv.ioServers) - .filter(Object.hasOwnProperty.bind(srv.ioServers)) - .map(function (k) { return srv.ioServers[k] }); } }; diff --git a/package.json b/package.json index 2ede3b54..5627b6bb 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "oauth": "^0.9.12", "q": "^1.0.1", "serve-static": "^1.5.3", - "socket.io": "~0.9.16", + "socket.io": "^1.0.6", "yamljs": "^0.1.5" } } diff --git a/www/js/callbacks.js b/www/js/callbacks.js index 291e9a4f..14a510d3 100644 --- a/www/js/callbacks.js +++ b/www/js/callbacks.js @@ -1106,17 +1106,10 @@ try { throw false; } - if (NO_WEBSOCKETS || USEROPTS.altsocket) { - var i = io.transports.indexOf("websocket"); - if (i >= 0) { - io.transports.splice(i, 1); - } - } - if (IO_URL === IO_URLS["ipv4-ssl"] || IO_URL === IO_URLS["ipv6-ssl"]) { - socket = io.connect(IO_URL, { secure: true }); + socket = io(IO_URL, { secure: true }); } else { - socket = io.connect(IO_URL); + socket = io(IO_URL); } setupCallbacks(); } catch (e) {