magicworld
Este commit está contenido en:
209
testing/magicworld/server/server.js
Archivo normal
209
testing/magicworld/server/server.js
Archivo normal
@@ -0,0 +1,209 @@
|
||||
'use strict'
|
||||
|
||||
const express = require('express'),
|
||||
app = express(),
|
||||
fs = require('fs'),
|
||||
http = require('http'),
|
||||
// https = require('https'),
|
||||
map = require('./lib/maper'),
|
||||
// secure = require('express-force-ssl'),
|
||||
Url = require('url'),
|
||||
io = require('ws'),
|
||||
serveStatic = require('serve-static'),
|
||||
log = require('./lib/colorized').log,
|
||||
//colorized = require('./lib/colorized').colorized,
|
||||
logo = require('./lib/logo').logo,
|
||||
options = {
|
||||
key: fs.readFileSync(__dirname + '/ssl/key.pem'),
|
||||
cert: fs.readFileSync(__dirname + '/ssl/cert.pem')
|
||||
},
|
||||
channels = {},
|
||||
styles = {
|
||||
disconnect: ["FgRed", "Bright"],
|
||||
connect: ["FgGreen", "Bright"]
|
||||
};
|
||||
|
||||
logo();
|
||||
|
||||
app
|
||||
//.use(secure)
|
||||
.use(serveStatic(__dirname + '/public'));
|
||||
|
||||
const server = http.createServer(app),
|
||||
ws = new io.Server({
|
||||
server: server
|
||||
});
|
||||
server.listen(80)
|
||||
|
||||
ws.on('connection', (socket, req) => {
|
||||
let params = Url.parse(req.url, true).query;
|
||||
socket.channel = params.channelName;
|
||||
socket.username = params.username;
|
||||
if (!channels[socket.channel]) {
|
||||
channels[socket.channel] = map.create(socket.channel);
|
||||
}
|
||||
socket.send(socket.username + " create " + JSON.stringify(channels[socket.channel]));
|
||||
channels[socket.channel].players[socket.username] = {
|
||||
"position": map.getRandomPosition(channels[socket.channel].limits),
|
||||
"direction": "down",
|
||||
"state": "stop",
|
||||
"username": socket.username,
|
||||
"lives": channels[socket.channel].player.lives,
|
||||
"scale": channels[socket.channel].player.scale,
|
||||
"score": 0,
|
||||
"width": 0,
|
||||
"height": 0
|
||||
};
|
||||
|
||||
let msg = socket.username + " " + JSON.stringify(channels[socket.channel].players[socket.username]);
|
||||
socket.send(msg);
|
||||
|
||||
// Cuando recive un mensaje
|
||||
socket.on('message', msg => {
|
||||
var username = msg.split(" ")[0];
|
||||
var type = msg.split(" ")[1];
|
||||
if (type != "chat" && channels[socket.channel].players[socket.username].position) {
|
||||
var data = JSON.parse(msg.replace(username + " ", "")),
|
||||
v = channels[socket.channel].player.velocity_divisor ? ((channels[socket.channel].players[socket.username].position.y) + (channels[socket.channel].size.y / 2)) / channels[socket.channel].player.velocity_divisor : channels[socket.channel].player.velocity,
|
||||
mx = -data.vx / channels[socket.channel].player.dvx * v,
|
||||
my = -data.vy / channels[socket.channel].player.dvy * v;
|
||||
|
||||
if (map.moveX(mx, channels[socket.channel].players[socket.username], channels[socket.channel])) {
|
||||
channels[socket.channel].players[socket.username].position.x += mx;
|
||||
}
|
||||
if (map.moveY(my, channels[socket.channel].players[socket.username], channels[socket.channel])) {
|
||||
channels[socket.channel].players[socket.username].position.y += my;
|
||||
}
|
||||
|
||||
channels[socket.channel].players[socket.username].state = data.state;
|
||||
channels[socket.channel].players[socket.username].direction = data.direction;
|
||||
channels[socket.channel].players[socket.username].width = data.width;
|
||||
channels[socket.channel].players[socket.username].height = data.height;
|
||||
|
||||
if(channels[socket.channel].player.scale_ratio_divisor){
|
||||
channels[socket.channel].players[socket.username].scale = (((channels[socket.channel].players[socket.username].position.y * -1) / channels[socket.channel].player.scale_ratio_divisor) - channels[socket.channel].player.scale) * -1;
|
||||
}else{
|
||||
channels[socket.channel].players[socket.username].scale = channels[socket.channel].player.scale;
|
||||
}
|
||||
|
||||
if (channels[socket.channel].players[socket.username].state == "attack") {
|
||||
var collider;
|
||||
var punch = 80;
|
||||
switch (channels[socket.channel].players[socket.username].direction) {
|
||||
case "up":
|
||||
collider = {
|
||||
position: {
|
||||
x: channels[socket.channel].players[socket.username].position.x,
|
||||
y: parseInt(channels[socket.channel].players[socket.username].position.y) - 40
|
||||
},
|
||||
width: channels[socket.channel].players[socket.username].width,
|
||||
height: 40,
|
||||
punch: -punch,
|
||||
direction: "y"
|
||||
};
|
||||
break;
|
||||
case "down":
|
||||
collider = {
|
||||
position: {
|
||||
x: channels[socket.channel].players[socket.username].position.x,
|
||||
y: parseInt(channels[socket.channel].players[socket.username].position.y) + parseInt(channels[socket.channel].players[socket.username].height)
|
||||
},
|
||||
width: channels[socket.channel].players[socket.username].height,
|
||||
height: 40,
|
||||
punch: punch,
|
||||
direction: "y"
|
||||
};
|
||||
break;
|
||||
case "left":
|
||||
collider = {
|
||||
position: {
|
||||
x: parseInt(channels[socket.channel].players[socket.username].position.x) - 40,
|
||||
y: channels[socket.channel].players[socket.username].position.y
|
||||
},
|
||||
width: 40,
|
||||
height: channels[socket.channel].players[socket.username].height,
|
||||
punch: -punch,
|
||||
direction: "x"
|
||||
};
|
||||
break;
|
||||
case "right":
|
||||
collider = {
|
||||
position: {
|
||||
x: parseInt(channels[socket.channel].players[socket.username].position.x) + parseInt(channels[socket.channel].players[socket.username].width),
|
||||
y: channels[socket.channel].players[socket.username].position.y
|
||||
},
|
||||
width: 40,
|
||||
height: channels[socket.channel].players[socket.username].height,
|
||||
punch: punch,
|
||||
direction: "x"
|
||||
};
|
||||
break;
|
||||
}
|
||||
|
||||
var msg2 = "";
|
||||
Object.values(channels[socket.channel].players).map(x => {
|
||||
if(map.collision(collider, x)){
|
||||
x.lives -= parseInt(x.lives) > 0 ? 1 : 0;
|
||||
if(parseInt(x.lives) == 0){
|
||||
channels[socket.channel].players[socket.username].lives += parseInt(channels[socket.channel].players[socket.username].lives) < 16 ? 1 : 0;
|
||||
channels[socket.channel].players[socket.username].score += parseInt(x.score) != 0 ? Math.round(x.score/2) : 0;
|
||||
x.score = 0;
|
||||
x.position = map.getRandomPosition(channels[socket.channel].limits);
|
||||
if(channels[socket.channel].player.scale_ratio_divisor){
|
||||
x.scale = (((x.position.y * -1) / channels[socket.channel].player.scale_ratio_divisor) - channels[socket.channel].player.scale) * -1;
|
||||
}
|
||||
x.lives = channels[socket.channel].player.lives;
|
||||
}else{
|
||||
if(collider.direction == "x"){
|
||||
if(map.moveX(collider.punch, x, channels[socket.channel])){
|
||||
x.position[collider.direction] += collider.punch;
|
||||
}
|
||||
}else{
|
||||
if(map.moveY(collider.punch, x, channels[socket.channel])){
|
||||
x.position[collider.direction] += collider.punch;
|
||||
}
|
||||
}
|
||||
channels[socket.channel].players[socket.username].score += 10;
|
||||
if(channels[socket.channel].player.scale_ratio_divisor){
|
||||
x.scale = (((x.position.y * -1) / channels[socket.channel].player.scale_ratio_divisor) - channels[socket.channel].player.scale) * -1;
|
||||
}
|
||||
}
|
||||
channels[socket.channel].players[x.username] = x;
|
||||
msg2 = x.username + " " + JSON.stringify(x);
|
||||
}
|
||||
});
|
||||
}
|
||||
msg = socket.username + " " + JSON.stringify(channels[socket.channel].players[socket.username]);
|
||||
}
|
||||
|
||||
ws.clients.forEach(function each(client) {
|
||||
if (client.channel == socket.channel && client.readyState === io.OPEN) {
|
||||
if (msg2) client.send(msg2);
|
||||
client.send(msg);
|
||||
}
|
||||
});
|
||||
})
|
||||
|
||||
// Cierra la conexión y envía a los demás el mensaje
|
||||
.on('close', () => {
|
||||
log(socket.username + " | Disconect on " + socket.channel + ".", styles.disconnect);
|
||||
ws.clients.forEach(function each(client) {
|
||||
if (client !== socket && client.channel == socket.channel && client.readyState === io.OPEN) {
|
||||
client.send(socket.username + " left");
|
||||
}
|
||||
});
|
||||
delete channels[socket.channel].players[socket.username];
|
||||
socket.removeAllListeners();
|
||||
//socket.disconnect();
|
||||
});
|
||||
|
||||
log(socket.username + " | Connect on " + socket.channel + ".", styles.connect);
|
||||
});
|
||||
|
||||
/*
|
||||
.on('register', data => {
|
||||
log("register");
|
||||
socket.emit('users', { users: "testing" })
|
||||
socket.broadcast.emit('adduser', { user: "elgustavo" })
|
||||
})
|
||||
*/
|
||||
Referencia en una nueva incidencia
Block a user