cryptalk/server.js

106 lines
2.7 KiB
JavaScript
Raw Normal View History

2014-09-25 10:27:33 -04:00
#!/usr/bin/env node
const
handler = require('serve-handler'),
2017-02-22 17:09:50 -05:00
port = process.env.PORT || 8080,
path = require('path');
2014-09-25 10:27:33 -04:00
let
2017-02-22 17:09:50 -05:00
server,
io;
// Create http server, handle files.assets
server = require('http').createServer(function (req, res) {
return handler(req, res, {
public: path.resolve(__dirname, 'public')
});
});
// Append socket.io to http server
io = require('socket.io')(server),
// Listen to port env:PORT or 8080
server.listen(port, function(){
2017-02-22 17:09:50 -05:00
console.log('listening on *:' + port);
});
2014-09-18 12:21:07 -04:00
io.on('connection', function(socket) {
2017-02-22 17:09:50 -05:00
socket.on('room:join', function(req) {
if( req ) {
socket.emit('room:joined',req);
socket.join(req);
socket.broadcast.to(req).emit('message:server', {msg:'person_joined'} );
socket.current_room = req;
} else {
socket.emit('message:server', {msg:'command_failed'} );
}
});
2017-02-22 17:09:50 -05:00
socket.on('room:leave', function(req) {
if( req ) {
socket.emit('room:left');
socket.leave(req);
socket.broadcast.to(req).emit('message:server', {msg:'person_left'} );
socket.current_room = undefined;
} else {
socket.emit('message:server', {msg:'command_failed'} );
}
});
2014-09-22 16:11:13 -04:00
2017-02-22 17:09:50 -05:00
socket.on('room:count', function () {
if( socket.current_room !== undefined ) {
let clientsInRoom = 0;
if (io.sockets.adapter.rooms.has(socket.current_room)) clientsInRoom = io.sockets.adapter.rooms.get(socket.current_room).size
if( clientsInRoom > 1) {
socket.emit('message:server', {msg:'person_count', payload: clientsInRoom } );
2019-11-05 23:00:23 -05:00
} else {
socket.emit('message:server', {msg:'person_single'} );
}
2017-02-22 17:09:50 -05:00
} else {
socket.emit('message:server', {msg:'command_failed'} );
}
});
2014-09-22 16:11:13 -04:00
2017-02-22 17:09:50 -05:00
socket.on('message:send', function(req) {
2014-09-22 16:11:13 -04:00
2017-02-22 17:09:50 -05:00
// Check that the user is in a room
if(req && req.room) {
2014-09-22 16:11:13 -04:00
2017-02-22 17:09:50 -05:00
// Check that the message size is within bounds
var total_msg_size = (req.msg) ? req.msg.length : 0 + (req.nick) ? req.nick.length : 0;
if( total_msg_size <= 4096) {
2014-09-22 16:11:13 -04:00
2017-02-22 17:09:50 -05:00
// Check that at least 100ms has passed since last message
if( socket.last_message === undefined || new Date().getTime() - socket.last_message > 100 ) {
2014-09-22 16:11:13 -04:00
2017-02-22 17:09:50 -05:00
socket.broadcast.to(req.room).emit('message:send', { msg: req.msg, nick: req.nick} );
socket.emit('message:send', { msg: req.msg, nick: req.nick} );
2014-09-22 16:11:13 -04:00
2017-02-22 17:09:50 -05:00
socket.last_message = new Date().getTime();
2014-09-22 16:11:13 -04:00
2017-02-22 17:09:50 -05:00
} else {
2014-09-22 16:11:13 -04:00
2017-02-22 17:09:50 -05:00
// Do not complain if message rate is too fast, that would only generate more traffic
2014-09-22 16:11:13 -04:00
2017-02-22 17:09:50 -05:00
}
2014-09-22 16:11:13 -04:00
2017-02-22 17:09:50 -05:00
} else {
2014-09-22 16:11:13 -04:00
2017-02-22 17:09:50 -05:00
// Message size is out of bounds, complain
socket.emit('message:server', {msg:'command_failed'} );
}
2014-09-22 16:11:13 -04:00
2017-02-22 17:09:50 -05:00
}
2014-09-18 12:21:07 -04:00
2017-02-22 17:09:50 -05:00
});
2017-02-22 17:09:50 -05:00
socket.on('disconnect', function() {
// Notify other users of the room
if( socket.current_room !== undefined ) {
socket.broadcast.to(socket.current_room).emit('message:server', {msg:'person_left'} );
}
});
2014-10-20 13:14:44 -04:00
2019-11-05 23:00:23 -05:00
});