import { game } from "./game"; import { users } from "./Account/users"; 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 { registerQuestCallbacks } from "./Quest/questSocket"; const express = require("express"); const app = express(); const port = 3000; const server = require('http').Server(app); const fs = require('fs'); server.listen(port, () => { console.log(`Server listening at port ${port}`); }); const io = require("socket.io")(server, { path: "/webmmo/", cors: { origin: '*', methods: ["GET", "POST"] } }); users.loadUsers(fs); players.loadPlayers(fs); io.on('connection', (socket) => { console.log("Got connection!"); socket.emit("connectSuccess", ""); registerAccountCallbacks(socket); registerLobbyCallbacks(socket); registerItemCallbacks(socket); registerLevelCallbacks(socket); registerQuestCallbacks(socket); socket.io = game.socketIO = io; socket.on("disconnect", () => { socket.disconnect() if(socket.hasOwnProperty("player")){ socket.player.save(fs) } if(socket.hasOwnProperty("user")){ socket.user.save(fs) 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(async () => { let userCount = game.lobbyState.players.length if(userCount > 0){ game.lobbyState.rooms.forEach(room=>{ let roomData = room.copyUpdate() io.in(room.id).emit('level/update', JSON.stringify(roomData)) }) game.playersDB.forEach(p=>{ p.damageInfo = [] }) } }, 1000/30) setInterval(() => { let lobbyState = game.lobbyState console.clear() console.log("Players:") for(let i = 0; i < lobbyState.players.length; i++){ console.log(lobbyState.players[i].id + " " + lobbyState.players[i].room) } console.log("Rooms:") for(let i = 0; i < lobbyState.rooms.length; i++){ console.log(lobbyState.rooms[i].id + " " + lobbyState.rooms[i].hostId) lobbyState.rooms[i].objects.forEach(object => { console.log("\t" + object.id + ": " + JSON.stringify(object.rigidbody)) }); } console.log("Dungeon:") for(let i = 0; i < lobbyState.dungeons.length; i++){ console.log(lobbyState.dungeons[i].entranceId + " " + lobbyState.dungeons[i].playerCount) } }, 5000) setInterval(() => { users.saveUsers(fs); players.savePlayers(fs); }, 1000 * 60 * 60 * 12) //twice a day process.on('uncaughtException', function (err) { console.log('Caught exception: ', err); }); process.on('SIGINT', function () { console.log('Ctrl-C...'); process.exit(2); }); process.on('exit', function () { users.saveUsers(fs); players.savePlayers(fs); console.log("exitted"); });