Created connectedUser.js, cleaned activeChannel.js
This commit is contained in:
parent
8384e732f3
commit
68f9d5af06
4 changed files with 109 additions and 55 deletions
78
src/app/channel/connectedUser.js
Normal file
78
src/app/channel/connectedUser.js
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
/*Canopy - The next generation of stoner streaming software
|
||||
Copyright (C) 2024 Rainbownapkin and the TTN Community
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.*/
|
||||
|
||||
//local imports
|
||||
const flairModel = require('../../schemas/flairSchema');
|
||||
const permissionModel = require('../../schemas/permissionSchema');
|
||||
|
||||
module.exports = class{
|
||||
constructor(id, name, rank, flair, channel, socket){
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
this.rank = rank;
|
||||
this.flair = flair;
|
||||
this.channel = channel;
|
||||
this.sockets = [socket.id];
|
||||
}
|
||||
|
||||
emit(eventName, args){
|
||||
//Crawl through user's sockets (lol)
|
||||
this.sockets.forEach((sockid) => {
|
||||
//Send event out to each one
|
||||
const socket = this.channel.server.io.sockets.sockets.get(sockid);
|
||||
socket.emit(eventName, args);
|
||||
});
|
||||
}
|
||||
|
||||
async sendClientMetadata(){
|
||||
//Get flairList from DB and setup flairList array
|
||||
const flairListDB = await flairModel.find({});
|
||||
var flairList = [];
|
||||
|
||||
//Setup our userObj
|
||||
const userObj = {
|
||||
id: this.id,
|
||||
user: this.user,
|
||||
rank: this.rank,
|
||||
flair: this.flair
|
||||
}
|
||||
|
||||
//For each flair listed in the Database
|
||||
flairListDB.forEach((flair)=>{
|
||||
//Check if the user has permission to use the current flair
|
||||
if(permissionModel.rankToNum(flair.rank) <= permissionModel.rankToNum(this.rank)){
|
||||
//If so push a light version of the flair object into our final flair list
|
||||
flairList.push({
|
||||
name: flair.name,
|
||||
displayName: flair.displayName
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
//Send off the metadata to our user's clients
|
||||
this.emit("clientMetadata", {user: userObj, flairList});
|
||||
}
|
||||
|
||||
updateFlair(flair){
|
||||
//This will run multiple times in a row, we don't need to broadcast the userlist every time
|
||||
if(this.flair != flair){
|
||||
this.flair = flair;
|
||||
this.channel.broadcastUserList();
|
||||
}
|
||||
|
||||
this.sendClientMetadata();
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue