Files on socket.io namespace

pull/23/head
Maciej Winnicki 2013-11-05 00:19:23 +01:00
parent fcbef4a122
commit 146c53500c
6 changed files with 32 additions and 15 deletions

View File

@ -1,5 +1,6 @@
var connect = require('connect');
var cookieParser = require('cookie');
var crypto = require('crypto');
var daemon = require('daemon');
var fs = require('fs');
var http = require('http');
@ -41,6 +42,7 @@ var connectBuilder = require('./lib/connect_builder');
var doAuthorization = false;
var sessionSecret = null;
var sessionKey = null;
var filesNamespace = null;
if (program.args.length === 0) {
console.error('Arguments needed, use --help');
process.exit();
@ -50,6 +52,7 @@ var connectBuilder = require('./lib/connect_builder');
sessionSecret = String(+new Date()) + Math.random();
sessionKey = 'sid';
}
filesNamespace = crypto.createHash('md5').update(program.args.join(' ')).digest('hex');
}
if (program.daemonize) {
@ -86,7 +89,7 @@ var connectBuilder = require('./lib/connect_builder');
}
builder.static(__dirname + '/lib/web/assets');
builder.index(__dirname + '/lib/web/index.html', program.args.join(' '), program.theme);
builder.index(__dirname + '/lib/web/index.html', program.args.join(' '), filesNamespace, program.theme);
var app = builder.build();
var server;
@ -125,7 +128,7 @@ var connectBuilder = require('./lib/connect_builder');
* When connected send starting data
*/
var tailer = tail(program.args, {buffer: program.number});
io.sockets.on('connection', function (socket) {
var filesSocket = io.of('/' + filesNamespace).on('connection', function (socket) {
socket.emit('options:lines', program.lines);
tailer.getBuffer().forEach(function (line) {
@ -137,7 +140,7 @@ var connectBuilder = require('./lib/connect_builder');
* Send incoming data
*/
tailer.on('line', function (line) {
io.sockets.emit('line', sanitizer(line).xss());
filesSocket.emit('line', sanitizer(line).xss());
});
}
})();

View File

@ -20,15 +20,16 @@ var fs = require('fs');
return this.app;
};
ConnectBuilder.prototype.index = function (path, title, theme) {
ConnectBuilder.prototype.index = function (path, files, filesNamespace, theme) {
theme = theme || 'default';
this.app.use(function (req, res) {
fs.readFile(path, function (err, data) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.end(data.toString('utf-8')
.replace(/__TITLE__/g, title)
.replace(/__THEME__/g, theme),
.replace(/__TITLE__/g, files)
.replace(/__THEME__/g, theme)
.replace(/__NAMESPACE__/g, filesNamespace),
'utf-8'
);
});

View File

@ -90,7 +90,7 @@ window.App = (function (window, document, io) {
var that = this;
// socket.io init
_socket = new io.connect();
_socket = new io.connect('/' + opts.namespace);
_socket
.on('options:lines', function (limit) {
_linesLimit = limit;

View File

@ -17,7 +17,8 @@
<script type="text/javascript">
window.load = App.init({
container: document.getElementsByClassName('log')[0],
filterInput: document.getElementsByClassName('query')[0]
filterInput: document.getElementsByClassName('query')[0],
namespace: '__NAMESPACE__'
});
</script>
</body>

View File

@ -64,7 +64,7 @@ var connectBuilder = require('../lib/connect_builder');
});
it('builds app that serve index file', function (done) {
var app = connectBuilder().index(__dirname + '/fixtures/index').build();
var app = connectBuilder().index(__dirname + '/fixtures/index', '/testfile').build();
app
.request()
@ -78,39 +78,50 @@ var connectBuilder = require('../lib/connect_builder');
it('builds app that replace index title', function (done) {
var app = connectBuilder()
.index(__dirname + '/fixtures/index_with_title', 'Test')
.index(__dirname + '/fixtures/index_with_title', '/testfile')
.build();
app
.request()
.get('/')
.expect('<head><title>Test</title></head>', done);
.expect('<head><title>/testfile</title></head>', done);
});
it('builds app that sets socket.io namespace based on files', function (done) {
var app = connectBuilder()
.index(__dirname + '/fixtures/index_with_ns', '/testfile', 'ns', 'dark')
.build();
app
.request()
.get('/')
.expect('ns', done);
});
it('builds app that sets theme', function (done) {
var app = connectBuilder()
.index(__dirname + '/fixtures/index_with_theme', 'Test', 'dark')
.index(__dirname + '/fixtures/index_with_theme', '/testfile', 'ns', 'dark')
.build();
app
.request()
.get('/')
.expect(
'<head><title>Test</title><link href="dark.css" rel="stylesheet" type="text/css"/></head>',
'<head><title>/testfile</title><link href="dark.css" rel="stylesheet" type="text/css"/></head>',
done
);
});
it('builds app that sets default theme', function (done) {
var app = connectBuilder()
.index(__dirname + '/fixtures/index_with_theme', 'Test')
.index(__dirname + '/fixtures/index_with_theme', '/testfile')
.build();
app
.request()
.get('/')
.expect(
'<head><title>Test</title><link href="default.css" rel="stylesheet" type="text/css"/></head>',
'<head><title>/testfile</title><link href="default.css" rel="stylesheet" type="text/css"/></head>',
done
);
});

1
test/fixtures/index_with_ns vendored Normal file
View File

@ -0,0 +1 @@
__NAMESPACE__