UNPKG

halo

Version:

Keeping your Backbone.js straight with Socket.io

97 lines (73 loc) 2.18 kB
"use strict"; var Origin = require('origin'); var Session = require('./session.js').Session; var und = require('underscore'); var http = require('http'); var sockets = require('socket.io'); var fs = require('fs'); var staticDir = __dirname + "/static/"; exports.SocketRouter = Origin.Responder.extend({ initializer : function(server, views) { this.parent(Origin.Responder).constructor(); if(server instanceof Array) { views = server; this.server = http.createServer(); } else { this.server = server; } this.oldListeners = this.server.listeners('request').splice(0); var self = this; this.server.on('request', function (req, res) { self.handleRequest(req, res); }); var io = sockets.listen(this.server); io.set('log level', 1); this.socket = io.sockets; // Compose the custom routes this.views = views || this.views || []; this.sessions = []; }, properties : { socket : false, views : false, sessions : false, listen : function(port) { var self = this; this.socket.on('connection', function(client) { var session = new Session(client); self.sessions.push(session); und.each(self.views, function(view) { view.openRoutes(session); }); }); this.server.listen(port || 80); }, addView : function(view) { this.views.push(view); und.each(this.sessions, function(session) { view.openRoutes(session); }); }, handleRequest : function(req, res) { if(req.url.indexOf('/halo/') === 0) { // Get the requested file and send it to client. fs.readFile(staticDir + req.url.substring(6), function (err, data) { if (err) { res.writeHead(500); return res.end('Error loading ' + req.url); } res.writeHead(200); res.end(data); }); } else { und.each(this.oldListeners, function(listener) { listener.call(this.server, req, res); }, this); return; } } } });