KF-MMO-Server/index.ts

112 lines
3.2 KiB
TypeScript

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");
});