Skip to content

Commit

Permalink
Add url tracking functionality to browser. Also prevent http requests…
Browse files Browse the repository at this point in the history
… being processed twice on certain versions of Node.
  • Loading branch information
firesock committed Dec 9, 2012
1 parent c32e6bc commit d6d926f
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 43 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
*~
*~
.directory
4 changes: 0 additions & 4 deletions client/css/client.css
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,4 @@ textarea#channel_box {

input#text_input {
width: 90%;
}

input#submit {
width: 5%;
}
5 changes: 4 additions & 1 deletion client/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<script src="bootstrap/js/bootstrap.min.js"></script>

<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="bootstrap/css/bootstrap-responsive.min.css" rel="stylesheet">
<link href="bootstrap/css/bootstrap-responsive.min.css" rel="stylesheet">

<link rel="stylesheet" type="text/css" href="css/client.css" />
<script src="js/client.js"></script>
Expand All @@ -23,6 +23,9 @@
<h2>Wiktionary - Guess the Wikipedia Article!</h2>
<p>One player chooses a secret wikipedia article. One person is chosen to guess this article. The first player can only hint at the target, via image links. Other connected players hinder the process by flooding other unrelated images in! Connect via IP on post-it note!</p>
<textarea id = "channel_box" readonly = "readonly"></textarea>
<div class="alert alert-error alert-block" id="used_url">
<strong>Whoops!</strong> Used that one before I'm afraid.
</div>
<form id="chat">
<input type="url" id = "text_input" autofocus = "autofocus" required="required"/>
<input type="submit" id="submit" value="Post"/>
Expand Down
31 changes: 24 additions & 7 deletions client/js/client.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,20 +11,37 @@ socket.on('msg', function(data) {
$('img#img_area').attr('src', data.msg);
});

$(document).ready(function() {
var miliseconds = 2000;
$('form#chat').submit(function(e) {
e.preventDefault();

socket.emit('say', {msg: $('#text_input').val()});
var miliseconds = 2000;
var used_urls = {};

function submit_handler(e) {
e.preventDefault();
$('#used_url').hide();

var input = $('#text_input').val();

if (input in used_urls) {
$('#text_input').val('');
$('#used_url').show();
} else {
socket.emit('say', {msg: input});
$('#text_input').attr('disabled', 'disabled');
$('#text_input').val('WAIT FOR ' + miliseconds);

used_urls[input] = true;

setTimeout(function() {
$('#text_input').val('');
$('#text_input').removeAttr('disabled');
$('#text_input').focus();
}, miliseconds);
}

}

$(document).ready(function() {

$('form#chat').submit(submit_handler);

});
$('#used_url').hide();
});
67 changes: 37 additions & 30 deletions server.js
Original file line number Diff line number Diff line change
@@ -1,43 +1,50 @@
var static = require('node-static'),
http = require('http'),
util = require('util'),
socket = require('socket.io');
http = require('http'),
util = require('util'),
socket = require('socket.io');

var webroot = "./client",
port = 8000;
port = 8000;

var file = new(static.Server)(webroot, {
cache: 0
cache: 0
});

var app = http.createServer(function(req, res) {
req.addListener('end', function() {
file.serve(req, res, function(err, result) {
if (err) {
console.error('Error serving %s - %s', req.url, err.message);
if (err.status === 404 || err.status === 500) {
file.serveFile(util.format('/%d.html', err.status), err.status, {}, req, res);
} else {
res.writeHead(err.status, err.headers);
res.end();
}
} else {
console.log('%s - %s', req.url, res.message);
}
});
});
});

app.listen(port);
function requestHandler(req, res) {
req.addListener('end', function() {
file.serve(req, res, function(err, result) {
if (err) {
console.error('Error serving %s - %s', req.url, err.message);
if (err.status === 404 || err.status === 500) {
file.serveFile(util.format('/%d.html', err.status), err.status, {}, req, res);
} else {
res.writeHead(err.status, err.headers);
res.end();
}
} else {
console.log('%s - %s', req.url, result.message);
}
});
});
}

var app = http.createServer(requestHandler);
var io = socket.listen(app);



io.sockets.on('connection', function (socket) {
socket.emit('join', {'name': socket.id});
socket.emit('join', {'name': socket.id});

socket.on('say', function(data) {
socket.broadcast.emit('msg', {name: socket.id, msg: data.msg});
socket.emit('msg', {name: socket.id, msg: data.msg});
});
socket.on('say', function(data) {
socket.broadcast.emit('msg', {name: socket.id, msg: data.msg});
socket.emit('msg', {name: socket.id, msg: data.msg});
});
});

//Work around a bug in socket.io - it delegates old handlers correctly
//but fails to remove them in versions of node.js. See:
// https://github.com/LearnBoost/socket.io/pull/1080
// https://github.com/LearnBoost/socket.io/issues/987
app.removeListener('request', requestHandler);

app.listen(port);

0 comments on commit d6d926f

Please sign in to comment.