import { game } from "./game"; import { users } from "./Account/users"; import { loadItems } from "./Items/items"; import { players } from "./Player/players"; import { registerItemCallbacks } from "./Items/itemSocket"; import { registerLobbyCallbacks } from "./Lobby/lobbySocket"; import { registerAccountCallbacks } from "./Account/accountSocket"; import { registerLevelCallbacks } from "./Level/levelSocket"; import { levelState } from "./Classes/levelState"; const express = require("express"); const app = express(); const port = 3000; const server = require('http').Server(app); server.listen(port, () => { console.log(`Server listening at port ${port}`); }); const io = require("socket.io")(server, { cors: { origin: '*', methods: ["GET", "POST"] } }); users.loadUsers(); players.loadPlayers(); loadItems() io.on('connection', (socket) => { console.log("Got connection!"); socket.emit("connectSuccess", ""); registerAccountCallbacks(socket); registerLobbyCallbacks(socket); registerItemCallbacks(socket); registerLevelCallbacks(socket); socket.io = game.socketIO = io; socket.on("disconnect", () => { socket.disconnect() if(socket.hasOwnProperty("user")){ game.lobbyState.removeUser(socket.user.id) delete socket.user } console.log(socket.id + " disconnected"); }); socket.on('error',function(er){ console.log(er); }); }); //Send player updates to everyone setInterval(() => { let userCount = game.lobbyState.players.length if(userCount > 0){ game.lobbyState.players.forEach(p=>{ let room = game.lobbyState.rooms.find(r=>r.id == p.room) if (room == null){ room = new levelState() room.id = p.room game.lobbyState.rooms.push(room) console.log("Added room " + room.id) } }) let removeRooms = [] for (let i = 0; i < game.lobbyState.rooms.length; i++){ let room = game.lobbyState.rooms[i] //assign host to a room if there isn't one if(room.hostId == -1){ let hostPlayer = game.lobbyState.players.find(p=>p.room == room.id) if(hostPlayer != null){ room.hostId = hostPlayer.id continue; } } //verify if host is still in the room let hostPlayer = game.lobbyState.players.find(p=>p.id == room.hostId) if(hostPlayer == null || hostPlayer.room != room.id){ //if they aren't, find another hostPlayer = game.lobbyState.players.find(p=>p.room == room.id) if(hostPlayer != null){ room.hostId = hostPlayer.id } else{ room.hostId = -1 removeRooms.push(i) } } } for(let i = removeRooms.length - 1; i >= 0; i--){ console.log("no players in room " + game.lobbyState.rooms[removeRooms[i]] + ". removing.") game.lobbyState.rooms.splice(removeRooms[i],1); } io.emit('lobby/update', JSON.stringify(game.lobbyState.copyLight())) game.playersDB.forEach(p=>{ p.damageInfo = [] }) } }, 1000/30) setInterval(() => { console.log("Players: " + game.lobbyState.players.length + ", users: " + game.lobbyState.users.length + ", rooms: " + game.lobbyState.rooms.length); }, 60 * 1000) process.on('SIGINT', function () { console.log('Ctrl-C...'); process.exit(2); }); process.on('exit', function () { users.saveUsers(); players.savePlayers(); console.log("exitted"); });