112 lines
3.2 KiB
TypeScript
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");
|
|
}); |