-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.js
117 lines (99 loc) · 2.79 KB
/
server.js
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
var express = require('express')
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var usersData = {userCount:0, users:[]};
app.get('/', function(req, res){
res.sendFile(__dirname + '/index.html');
});
app.use("/lib", express.static(__dirname + '/lib'));
app.use("/app", express.static(__dirname + '/app'));
app.use("/style", express.static(__dirname + '/style'));
app.use("/images", express.static(__dirname + '/images'));
app.use("/fonts", express.static(__dirname + '/fonts'));
io.on('connection', function(socket){
console.log('user connected');
socket.user = null;
socket.on('login', function(userData) {
userData = userData.toLowerCase().replace(/\s/g, "");
if(!isADuplicate(userData)) {
usersData.userCount++;
console.log('logginIn', userData);
socket.user = userData;
usersData.users.push(userData);
socket.emit('loggedIn', {msg: userData, users: usersData});
io.emit('botMessage', {msg: this.user+" has entered the chat", users: usersData});
setTimer(this);
} else {
this.emit('chooseDiffName');
}
//console.log('timer', this.timer);
})
socket.on('logout', function() {
disconnectUser(this);
io.emit('botMessage', {msg: this.user+" has left the chat", users: usersData});
clearTimer(this.timer);
})
socket.on('chat message', function(msg){
if(this.user==null) {
socket.emit('fakeLog');
}
console.log(this.user);
io.emit('chat message', {sender: this.user, msg: msg});
refreshTimer(this);
//console.log(this.timer);
});
socket.on('disconnect', function(){
if(this.user) {
console.log('user disconnected', this.user);
removeUser(this);
io.emit('botMessage', {msg: this.user+" has disconnected the chat", users: usersData});
clearTimer(this.timer);
}
});
});
function isADuplicate(name) {
if (isUserThere(name) > -1) {
return true;
}
return false;
}
function isUserThere(name) {
return usersData.users.indexOf(name);
}
function removeUser(socket) {
var index = isUserThere(socket.user);
if (index > -1) {
usersData.users.splice(index, 1);
usersData.userCount--;
}
}
function disconnectUser(socket) {
socket.emit('loggedOut', {users: usersData});
socket.disconnect('unauthorized');
removeUser(socket);
}
function kickUser(socket) {
disconnectUser(socket);
io.emit('botMessage', {msg: socket.user+" has been pushed out of the chat", people: usersData});
}
function refreshTimer(socket) {
clearTimer(socket.timer);
setTimer(socket);
}
function setTimer(socket) {
socket.timer = setTimeout(function() {
console.log(socket);
kickUser(socket);
console.log('kicked out due to inactivity');
}, 300000);
console.log(socket.timer);
}
function clearTimer(timer) {
if(timer) {
clearTimeout(timer);
}
}
http.listen(8080, function(){
console.log('listening on *:8080');
});