Commit ea5a9738b3dde183695a61356edb8d1c1a7b2a3c
1 parent
cd85f6db
Scoreboard : coté serveur
Showing
5 changed files
with
120 additions
and
0 deletions
Show diff stats
@@ -0,0 +1,23 @@ | @@ -0,0 +1,23 @@ | ||
1 | +{ | ||
2 | + "name": "trosh-scoreboard", | ||
3 | + "version": "0.0.1", | ||
4 | + "description": "Trosh scoreboard web app for Club Info", | ||
5 | + "main": "server.js", | ||
6 | + "scripts": { | ||
7 | + "test": "echo \"Error: no test specified\" && exit 1", | ||
8 | + "start": "node server.js" | ||
9 | + }, | ||
10 | + "repository": { | ||
11 | + "type": "git", | ||
12 | + "url": "git+https://github.com/clubinfopolytechlille/trosh.git" | ||
13 | + }, | ||
14 | + "author": "ClubInfoPolytechLille", | ||
15 | + "license": "WTFPL", | ||
16 | + "bugs": { | ||
17 | + "url": "https://github.com/clubinfopolytechlille/trosh/issues" | ||
18 | + }, | ||
19 | + "homepage": "https://github.com/clubinfopolytechlille/trosh#readme", | ||
20 | + "dependencies": { | ||
21 | + "express": "^4.13.4" | ||
22 | + } | ||
23 | +} |
@@ -0,0 +1,15 @@ | @@ -0,0 +1,15 @@ | ||
1 | +<!doctype html> | ||
2 | +<html lang="fr"> | ||
3 | +<head> | ||
4 | + <meta charset="UTF-8"> | ||
5 | + <title>Trosh Scoreboard</title> | ||
6 | +</head> | ||
7 | +<body> | ||
8 | + <h1>Trosh scores</h1> | ||
9 | + <ul id="list"> | ||
10 | + </ul> | ||
11 | + <script src="https://code.jquery.com/jquery-1.10.2.min.js"></script> | ||
12 | + <script src="/socket.io/socket.io.js"></script> | ||
13 | + <script src="/main.js"></script> | ||
14 | +</body> | ||
15 | +</html> |
@@ -0,0 +1,26 @@ | @@ -0,0 +1,26 @@ | ||
1 | +$(function() { | ||
2 | + var socket = io(); | ||
3 | + var scores = []; | ||
4 | + var list = $('#list'); | ||
5 | + | ||
6 | + socket.emit('getScores'); | ||
7 | + | ||
8 | + socket.on('scores', function(newScores) { | ||
9 | + scores = newScores; | ||
10 | + redrawScores(); | ||
11 | + }); | ||
12 | + | ||
13 | + socket.on('newScore', addScore); | ||
14 | + | ||
15 | + function redrawScores() { | ||
16 | + list.empty(); | ||
17 | + for (s in scores) { | ||
18 | + addScore(scores[s]); | ||
19 | + } | ||
20 | + } | ||
21 | + | ||
22 | + function addScore(obj) { | ||
23 | + list.append($('<li>').text(obj.score + ' by ' + obj.name)); | ||
24 | + } | ||
25 | + | ||
26 | +}); |
@@ -0,0 +1,51 @@ | @@ -0,0 +1,51 @@ | ||
1 | +#!/usr/bin/env node | ||
2 | +var express = require('express'); | ||
3 | +var app = express(); | ||
4 | +var server = require('http').createServer(app); | ||
5 | +var io = require('socket.io')(server); | ||
6 | +var port = process.env.PORT || 3000; | ||
7 | +var url = require('url'); | ||
8 | +var fs = require('fs'); | ||
9 | + | ||
10 | +var scores = []; | ||
11 | +loadScores(); | ||
12 | + | ||
13 | +server.listen(port, function() { | ||
14 | + console.log('Server listening at port %d', port); | ||
15 | +}); | ||
16 | + | ||
17 | +app.use(express.static(__dirname + '/public')); | ||
18 | + | ||
19 | +app.get('/', function(req, res) { | ||
20 | + res.sendStatus(200); | ||
21 | +}); | ||
22 | + | ||
23 | +app.get('/addScore', function(req, res) { | ||
24 | + var query = url.parse(req.url, true).query; | ||
25 | + addScore(parseInt(query.score), query.name); | ||
26 | + res.sendStatus(200); | ||
27 | +}); | ||
28 | + | ||
29 | +io.on('connection', function(socket) { | ||
30 | + socket.on('getScores', function() { | ||
31 | + socket.emit('scores', scores); | ||
32 | + }); | ||
33 | + | ||
34 | +}); | ||
35 | + | ||
36 | +function loadScores() { | ||
37 | + scores = JSON.parse(fs.readFileSync('scores.json', 'utf8')); | ||
38 | +} | ||
39 | + | ||
40 | +function saveScores() { | ||
41 | + fs.writeFileSync('scores.json', JSON.stringify(scores), 'utf8'); | ||
42 | +} | ||
43 | + | ||
44 | +function addScore(score, name) { | ||
45 | + console.log("Score of %d by %s", score, name); | ||
46 | + var obj = {score: score, name: name}; | ||
47 | + scores.push(obj); | ||
48 | + io.emit('newScore', obj); | ||
49 | + saveScores(); | ||
50 | +} | ||
51 | + |