const WebSocket = require('ws');
const Player = require('./player');
const Room = require('./room');
let lobby = new Room("Lobby");
let playersBySocket = new Map();
const ws = new WebSocket.Server({port: 9997});
ws.on('listening', function() {
console.log('Listening!');
});
const interval = setInterval(() =>
{
ws.clients.forEach(i =>
{
if (i.failedPong > 8)
{
i.terminate();
}
else
{
if (i.failedPong > 0)
{
console.log("Client failed pong " + i.failedPong + " " + (playersBySocket.has(i) ? playersBySocket.get(i).id : "noplayer"));
}
i.failedPong++;
i.ping();
}
}
);
}, 15000
);
ws.on('connection', function(conn)
{
console.log('Connection!');
conn.failedPong = 0;
conn.on('pong', () => { conn.failedPong = 0; });
conn.on('message', function(message)
{
if (playersBySocket.has(conn))
{
const p = playersBySocket.get(conn);
if (p.room != null)
{
p.room.playerMessage(p, message);
}
}
//console.log('Message: ' + message);
}
);
conn.on('close', function(code, reason)
{
console.log('Socket closed: ' + reason);
if (playersBySocket.has(conn))
{
const p = playersBySocket.get(conn);
console.log("Deleting player " + p.id);
playersBySocket.delete(conn);
p.room.removePlayer(p);
}
}
);
const p = new Player(conn);
playersBySocket.set(conn, p);
p.sendMessage("connected", {player_id:p.id});
console.log("New player (size " + playersBySocket.size + ")");
lobby.addPlayer(p);
}
);
ws.on('error', function(err)
{
console.log('Error: ' + err);
}
);