119 lines
3.7 KiB
TypeScript
119 lines
3.7 KiB
TypeScript
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");
|
|
}); |