forked from geekuillaume/Node.js-Chat
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathserver.js
More file actions
98 lines (83 loc) · 2.81 KB
/
server.js
File metadata and controls
98 lines (83 loc) · 2.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
// Customization
var defaultPort = 8080;
// Libraries
var express = require('express'), app = express();
var http = require('http');
var server = http.createServer(app);
var io = require('socket.io').listen(server);
var jade = require('jade');
var pseudoArray = ['admin']; //block the admin username (you can disable it)
// Views Options
app.set('view engine', 'jade');
app.set("view options", { layout: false })
app.configure(function() {
app.use(express.static(__dirname + '/public'));
});
app.set('port', process.env.PORT || defaultPort);
io.set('log level', 1);
server.listen(app.get('port'), function () {
console.log("Server listening on port %d", app.get('port'));
});
// Render and send the main page
app.get('/', function(req, res){
res.render('home.jade');
});
// Handle the socket.io connections
var users = 0; //count the users
io.sockets.on('connection', function (socket) { // First connection
users += 1;
reloadUsers(); // Send the count to all the users
// Test that socket can send message to itself
socket.on('echo', function(msg) {
socket.emit('echo', msg);
});
// Broadcast message to all
socket.on('message', function (data) {
var name = returnPseudo(socket);
if (name) {
var transmit = {date : new Date().toISOString(), pseudo : name, message : data};
socket.broadcast.emit('message', transmit);
console.log("user "+ transmit['pseudo'] +" said \""+data+"\"");
}
});
socket.on('setPseudo', function (data) { // Assign a name to the user
if (pseudoArray.indexOf(data) == -1) { // Test if the name is already taken
socket.set('pseudo', data, function(){
pseudoArray.push(data);
socket.emit('pseudoStatus', 'ok');
console.log("user " + data + " connected");
});
} else {
socket.emit('pseudoStatus', 'error') // Send the error
}
});
socket.on('disconnect', function () { // Disconnection of the client
users -= 1;
reloadUsers();
if (returnPseudo(socket)) {
var pseudo;
socket.get('pseudo', function(err, name) {
pseudo = name;
});
var index = pseudoArray.indexOf(pseudo);
pseudo.slice(index - 1, 1);
}
});
});
function reloadUsers() { // Send the count of the users to all
if (users == 1) {
io.sockets.emit('nbUsers', {"nb": "is " + users});
} else {
io.sockets.emit('nbUsers', {"nb": "are " + users});
}
}
function returnPseudo(socket) { // Return the name of the user
var pseudo;
socket.get('pseudo', function(err, name) {
if (name == null ) pseudo = false;
else pseudo = name;
});
return pseudo;
}
exports.server = server;
exports.app = app;