-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.js
93 lines (80 loc) · 2.83 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
var express = require('express'),
app = express(),
server = require('http').createServer(app),
io = require('socket.io').listen(server),
conf = require('./config.json'),
net = require("net");
// Userliste
var userlist = {};
// Webserver
// auf den Port x schalten
server.listen(conf.portChat);
app.configure(function(){
// statische Dateien ausliefern
app.use(express.static(__dirname + '/public'));
});
// wenn der Pfad / aufgerufen wird
app.get('/', function (req, res) {
// so wird die Datei index.html ausgegeben
res.sendfile(__dirname + '/public/index.html');
});
// Websocket
io.sockets.on('connection', function (socket) {
// IP From Client
var address = socket.request.connection.remoteAddress;
// der Client ist verbunden
socket.emit('chat', {zeit:new Date(), text:conf.loginMsg});
// wenn ein Benutzer einen Text senden
socket.on('chat', function (data) {
if (typeof data.target != "undefined") {
if (typeof userlist[data.target] != "undefined") {
userlist[data.name].socket.emit("chat", {zeit:new Date(), name:data.target, text:data.text, whisper:1});
userlist[data.target].socket.emit("chat", {zeit:new Date(), name:data.name, text:data.text, whisper:1});
}
} else {
// so wird dieser Text an alle anderen Benutzer gesendet
io.sockets.emit('chat', {zeit:new Date(), name:data.name, text:data.text});
}
});
// wenn statusmeldungen rein kommen
socket.on("status", function(data) {
if (data.status=="JOIN") {
io.sockets.emit('status', {zeit:new Date(), name:data.name, status:"JOINED"});
userlist[data.name] = {zeit:new Date(), name:data.name, socket:socket};
var users = [];
for (var key in userlist) {
users.push(key);
}
io.sockets.emit('status', {zeit:new Date(), name:data.name, status:"USERLIST", users:users});
}
if (userlist[data.name] != undefined) {
if (data.status=="PONG") {
userlist[data.name].zeit = new Date();
}
}
});
// Wenn ein benutzer den Chat verlässt
socket.on('disconnect', function (data) {
io.sockets.emit('status', {zeit: new Date(), status:'PING'});
setTimeout(function(){
var now = new Date();
for (var key in userlist) {
var userZeit = userlist[key].zeit;
if (userZeit.getTime() < (now.getTime()-conf.pongCheck)) {
io.sockets.emit("status", {zeit:new Date(), name:key, status:"LEFT"});
delete userlist[key];
}
}
}, conf.pongCheck);
});
});
// Connection from outsite
var netServer = net.createServer(function (socket) {
socket.on('data', function(data) {
console.log('DATA ' + socket.remoteAddress + ': ' + data);
io.sockets.emit('chat', {zeit:new Date(), name:"OUTSITE", text:data.text});
});
}).listen(conf.portOutsite, '127.0.0.1');
// Portnummer in die Konsole schreiben
console.log('Chat is running on http://127.0.0.1:'+conf.portChat+'/');
console.log('Data is running on http://127.0.0.1:'+conf.portOutsite+'/');