123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- 'use strict';
- import PlayerId from './players/player-id';
- import DuelController from './game-server/duel-controller';
- import MariadbConnector from './db/mariadb-connector';
- import ServerToolListner from './tools/server-tool-listener';
- function Server() {
- console.log('Starting 12 heroes server');
- const io = require('socket.io');
- const server = io.listen(2610);
- let mariadbConn = new MariadbConnector();
- let authorizedPlayers = new Map();
- let connectedPlayers = new Map();
- let authorizedPlayersNames = new Set();
- // let players = [];
- // let addNewPlayer = function (playerSocket, playerName) {
- // console.log('players length : ' + players.length + ' : ' + players);
- // if (players.length < 2) {
- // let newPlayer = new PlayerId(playerSocket, playerName);
- // console.log('push player : ' + newPlayer);
- // players.push(newPlayer);
- // }
- // if (players.length === 2) {
- // let duelController = new DuelController(players[0], players[1]);
- // }
- // };
- server.on('connection', function (socket) {
- console.log("A player connected with id : " + socket.id);
- socket.on('disconnect', (reason) => {
- if (reason === 'client namespace disconnect') {
- console.log("A player disconnected with id : " + socket.id);
- let playerName = connectedPlayers.get(socket.id);
- if (playerName) {
- connectedPlayers.delete(socket.id);
- authorizedPlayers.get(playerName).setConnected(false);
- authorizedPlayers.get(playerName).setSocket(null);
- console.log(playerName + " disconnected");
- }
- } else {
- console.log("disconnected unexpectidly with reason : " + reason);
- }
- });
- socket.on('connect', () => {
- console.log("Connected to server");
- });
- socket.on('auth', async (playerName, callback) => {
- console.log(' Received auth message, player name : ' + playerName);
- await updatePlayersFromDb();
- let response = {};
- let kickout = false;
- if (!authorizedPlayersNames.has(playerName)) {
- response = {
- res: "ko",
- message: playerName + " Not found"
- };
- kickout = true;
- }
- // If the player is already connected and active
- else if (authorizedPlayers.get(playerName).isConnected()
- && authorizedPlayers.get(playerName).getSocket().connected) {
- response = {
- res: "ko",
- message: playerName + " already connected"
- };
- kickout = true;
- }
- else {
- // Player marked as connected but socket is down
- if (authorizedPlayers.get(playerName).isConnected()) {
- authorizedPlayers.get(playerName).getSocket().disconnect(true);
- }
- response = {
- res: "ok",
- message: playerName + " connected"
- };
- authorizedPlayers.get(playerName).setConnected(true);
- authorizedPlayers.get(playerName).setSocket(socket);
- connectedPlayers.set(socket.id, playerName);
- }
- callback(response);
- if (kickout === true) {
- setTimeout(() => {
- socket.disconnect(true);
- }, 600);
- }
- });
- socket.on('games-list', async (playerName, callback) => {
- console.log(' Received games-list message, player name : ' + playerName);
- let response = {};
- try {
- let games = await getNonFinishedGames(playerName);
- response = {
- res: "ok",
- message: games
- };
- } catch (error) {
- response = {
- res: "ko",
- message: 'Error from server'
- };
- }
- callback(response);
- });
- });
- let updatePlayersFromDb = async function () {
- try {
- let usernames = await mariadbConn.getUsernames();
- authorizedPlayersNames = new Set(usernames);
- console.log('authorizedPlayersNames update : ', authorizedPlayersNames);
- authorizedPlayersNames.forEach(name => {
- if (!authorizedPlayers.has(name)) {
- console.log('New username authorized :', name);
- authorizedPlayers.set(name, new PlayerId(name));
- }
- });
- return 'ok';
- } catch (error) {
- console.log('Error getting usernames from DB : ', error);
- return error.Error;
- }
- };
- let getCurrentListAuthorizedPlayers = function () {
- return [...authorizedPlayersNames];
- };
- let addPlayerDb = async function (username) {
- console.log('add player in db : ' + username);
- try {
- let response = await mariadbConn.addPlayer(username);
- authorizedPlayersNames.add(username);
- authorizedPlayers.set(username, new PlayerId(username));
- return 'OK ' + JSON.stringify(response);
- } catch (err) {
- return 'KO ' + err.message;
- }
- };
- let removePlayerDb = async function (username) {
- console.log('remove player in db : ' + username);
- try {
- let response = await mariadbConn.removePlayer(username);
- authorizedPlayersNames.delete(username);
- authorizedPlayers.delete(username);
- return 'OK ' + JSON.stringify(response);
- } catch (err) {
- return 'KO ' + err.message;
- }
- };
- let addGameDb = async function (game) {
- try {
- let response = await mariadbConn.addNewGame(game);
- return 'OK ' + JSON.stringify(response);
- } catch (err) {
- return 'KO ' + err.message;
- }
- };
- let removeGameDb = async function (method, ...args) {
- try {
- let response;
- switch (method) {
- case 'byId':
- response = await mariadbConn.removeGameById(args[0]);
- break;
- case 'byPlayer1':
- response = await mariadbConn.removeGamesByPlayer1(args[0]);
- break;
- case 'byPlayerAny':
- response = await mariadbConn.removeGamesByPlayerAny(args[0]);
- break;
- case 'byStatus':
- response = await mariadbConn.removeGamesByStatus(args[0]);
- break;
- case 'byDays':
- response = await mariadbConn.removeGamesByDays(args[0]);
- break;
- case 'finishedByDays':
- response = await mariadbConn.removeFinishedGamesByDays(args[0]);
- break;
- default:
- return 'KO : Unknown method to remove game from DB : ' + method;
- }
- return 'OK ' + JSON.stringify(response);
- } catch (err) {
- return 'KO ' + err.message;
- }
- };
- let getNonFinishedGames = async function (username) {
- try {
- let games = await mariadbConn.getNonFinishedGamesForPlayer(username);
- return games;
- } catch (err) {
- console.log('KO : not able to get games : ' + err);
- throw err;
- }
- };
- return {
- updatePlayersFromDb,
- getCurrentListAuthorizedPlayers,
- addPlayerDb,
- removePlayerDb,
- addGameDb,
- removeGameDb,
- getNonFinishedGames
- };
- }
- let server = new Server();
- let serverToolListner = new ServerToolListner(server);
- serverToolListner.listen(1664);
|