import './socketExtended.js'; import 'reflect-metadata'; import express from 'express'; import { createServer } from 'http'; import { Server as SocketIOServer } from 'socket.io'; import { game } from "./game.js"; import { characters } from "./Characters/characters.js"; import { registerItemCallbacks } from "./Items/itemSocket.js"; import { registerLobbyCallbacks } from "./Lobby/lobbySocket.js"; import { registerAccountCallbacks } from "./Account/accountSocket.js"; import { registerLevelCallbacks } from "./Level/levelSocket.js"; import { registerQuestCallbacks } from "./Quest/questSocket.js"; import { DatabaseController } from './Database/dbcontroller.js'; import { SocketExtended } from './socketExtended.js'; import { Endpoints } from './endpoints.js'; const app = express(); const port = 3000; const server = createServer(app); export const db = await DatabaseController.create('./Database/mydb.sqlite3'); server.listen(port, () => { console.log(`Server listening at port ${port}`); }); const io = game.socketIO = new SocketIOServer(server, { path: "/webmmo/", cors: { origin: '\*', methods: ["GET", "POST"] } }); io.on('connection', (socket : SocketExtended) => { console.log("Got connection!"); socket.emit("connectSuccess", ""); registerAccountCallbacks(socket); registerLobbyCallbacks(socket); registerItemCallbacks(socket); registerLevelCallbacks(socket); registerQuestCallbacks(socket); socket.io = io; socket.on("disconnect", () => { socket.disconnect() if(socket.character != null){ characters.savePlayer(db, socket.character) } game.removeUser(socket) console.log(socket.id + " disconnected"); }); // socket.on('error',function(er){ // console.log(er); // }); }); //Send player updates to everyone setInterval(async () => { let userCount = game.lobbyState.activeUsers.length if(userCount > 0){ game.lobbyState.rooms.forEach(room=>{ let roomData = room.copyUpdate() io.in(room.id).emit(Endpoints.LevelUpdate, JSON.stringify(roomData)) }) game.lobbyState.activeUsers.forEach(u=>{ u.character.resetDamageInfo() }) } }, 1000/30) // setInterval(() => { // let lobbyState = game.lobbyState // console.clear() // console.log("Players:") // for(let i = 0; i < lobbyState.activeUsers.length; i++){ // console.log(lobbyState.activeUsers[i].user.login + " " + lobbyState.activeUsers[i].character.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) 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 () { console.log("exitted"); });