Projektmanagement-Game/Webservice/server.js
2021-05-26 22:58:00 +02:00

81 lines
2.2 KiB
JavaScript

let express = require('express');
let app = express();
let server = require('http').createServer(app);
let {Server} = require("socket.io");
let io = new Server(server);
let port = 5000;
server.listen(port, function () {
generate_log_message("MAIN", "Server", 'RUNNING', "PORT " + port);
});
app.use(express.static(__dirname + '/../public'));
io.on('connection', socket => {
let addedUser = false;
socket.on('add user', function (data) {
socket.username = data.username;
socket.room = data.room_name;
addedUser = true;
socket.emit('login');
socket.join(socket.room);
socket.broadcast.to(socket.room).emit('user joined', socket.username);
generate_log_message(socket.room, socket.username, "JOINED", "");
});
socket.on('new message', function (data) {
socket.broadcast.to(socket.room).emit('new message', {
username: socket.username,
message: data
});
generate_log_message(socket.room, socket.username, "MESSAGE", data);
});
socket.on('disconnect', function () {
if (addedUser) {
socket.broadcast.to(socket.room).emit('user left', socket.username);
}
generate_log_message(socket.room, socket.username, "LEFT", "");
});
});
function generate_log_message(room, user, type, message) {
let color;
switch (type) {
case 'LEFT':
color = '\x1b[31m';
break;
case 'JOINED':
color = '\x1b[32m';
break;
case 'MESSAGE':
color = '\x1b[36m';
break;
case 'RUNNING':
color = '\x1b[35m';
break;
default:
color = '\x1b[0m';
}
room = pad(10, room, ' ').substr(0, 10);
user = pad(10, user, ' ').substr(0, 10);
type = pad(10, type, ' ').substr(0, 10);
let reset_color = '\x1b[0m';
console.info("%s[%s] [%s] [%s]\x1b[0m %s", color, room, user, type, reset_color, message);
}
function pad(width, string, padding) {
if (string === undefined) return pad(width, " ", " ");
return (width <= string.length) ? string : pad(width, string + padding, padding)
}