-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.js
111 lines (87 loc) · 2.92 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
'use strict';
var os = require('os');
var nodeStatic = require('node-static');
var http = require('http');
var https = require('https');
var fs = require('fs');
var socketIO = require('socket.io');
var env = process.env.NODE_ENV = process.env.NODE_ENV || 'development';
console.log('env: ' + env);
var config = require('./config')[env];
var port = config.port;
var fileServer = new(nodeStatic.Server)();
/*var app = http.createServer(function(req, res) {
fileServer.serve(req, res);
}).listen(port);*/
if(env === 'production')
{
// Create an HTTP service, as Heroku manages HTTPS automatically.
var app = http.createServer(function(req, res) {
fileServer.serve(req, res);
}).listen(port);
}
else
{
var options = {
key: fs.readFileSync('vpkey.pem'),
cert: fs.readFileSync('vpcert.pem'),
passphrase: 'ArrozConLeche1!'
};
// Create an HTTPS service identical to the HTTP service.
/*var app = https.createServer(function(req, res) {
fileServer.serve(req, res);
}).listen(port);*/
var app = https.createServer(options, function(req, res) {
fileServer.serve(req, res);
}).listen(port);
}
var io = socketIO.listen(app);
console.log('Signaling server listening now on port ' + port);
io.sockets.on('connection', function(socket) {
// convenience function to log server messages on the client
function log() {
console.log(arguments);
var array = ['Message from server:'];
array.push.apply(array, arguments);
socket.emit('log', array);
}
socket.on('message', function(message) {
log('Client said: ', message);
// for a real app, would be room-only (not broadcast)
socket.broadcast.emit('message', message);
});
socket.on('create or join', function(room) {
log('Received request to create or join room ' + room);
//var numClients = io.sockets.sockets.length;
var numClients = Object.keys(io.sockets.sockets).length;
log('Room ' + room + ' now has ' + numClients + ' client(s)');
if (numClients === 1) {
socket.join(room);
log('Client ID ' + socket.id + ' created room ' + room);
socket.emit('created', room, socket.id);
} else if (numClients === 2) {
log('Client ID ' + socket.id + ' joined room ' + room);
// io.sockets.in(room).emit('join', room);
socket.join(room);
socket.emit('joined', room, socket.id);
socket.broadcast.emit('joined', room, socket.id);
io.sockets.in(room).emit('ready', room);
socket.broadcast.emit('ready', room);
} else { // max two clients
socket.emit('full', room);
}
});
socket.on('ipaddr', function() {
var ifaces = os.networkInterfaces();
for (var dev in ifaces) {
ifaces[dev].forEach(function(details) {
if (details.family === 'IPv4' && details.address !== '127.0.0.1') {
socket.emit('ipaddr', details.address);
}
});
}
});
socket.on('bye', function(){
console.log('received bye');
});
});