dragonroll/server/io/campaign.js

59 lines
2.2 KiB
JavaScript
Raw Normal View History

2024-08-04 22:30:33 +00:00
const CampaignUser = require("../models/CampaignUser");
const User = require("../models/User");
const FilterUser = require('../utils/filters');
let sessions = {};
2024-08-05 14:55:37 +00:00
async function GetOfflinePlayers(campaign){
let players = await CampaignUser.find({campaign}).populate('user').exec();
let finalPlayers = [];
console.log(players)
// TODO: Filter
players.forEach(player => finalPlayers.push(FilterUser(player)));
return finalPlayers;
}
function SetPlayerProperty(campaign, player_id, key, value){
objIndex = sessions[campaign].players.findIndex(player => player.user._id.toString() == player_id);
if(objIndex != -1){
sessions[campaign].players[objIndex][key] = value;
}
}
2024-08-04 22:30:33 +00:00
module.exports = io => {
io.on('connection', (socket) => {
socket.on('enter', (user, campaignId) => {
User.findOne(user).then(user => {
if(user){
socket.user = user;
2024-08-05 14:55:37 +00:00
CampaignUser.findOne({campaign: campaignId, user}).then(async campaignUser => {
2024-08-04 22:30:33 +00:00
if(campaignUser){
socket.join(campaignId);
socket.campaign = campaignId;
if(!sessions[campaignId]) sessions[campaignId] = {
2024-08-05 14:55:37 +00:00
players: await GetOfflinePlayers(campaignId)
2024-08-04 22:30:33 +00:00
};
2024-08-05 14:55:37 +00:00
2024-08-04 22:30:33 +00:00
console.log(socket.user.username + " ha entrado!");
2024-08-05 14:55:37 +00:00
SetPlayerProperty(campaignId, socket.user._id, "online", true);
2024-08-04 22:30:33 +00:00
io.to(socket.campaign).emit('update-players', sessions[campaignId].players)
2024-08-05 14:55:37 +00:00
// console.log(JSON.stringify(sessions[campaignId], null, 4));
2024-08-04 22:30:33 +00:00
}
});
}
})
});
socket.on('exit', () => {
2024-08-05 14:55:37 +00:00
SetPlayerProperty(socket.campaign, socket.user._id, "online", false);
io.to(socket.campaign).emit('update-players', sessions[socket.campaign].players)
2024-08-04 22:30:33 +00:00
socket.leave(socket.campaign)
console.log(socket.user.username + " ha salido!")
});
});
}