remove stacking clients

This commit is contained in:
BopItFreak 2019-06-06 14:54:06 -04:00
parent 3d4c8430cf
commit 61e6625201
1 changed files with 71 additions and 53 deletions

View File

@ -3,7 +3,7 @@
//room deleter //room deleter
//databases in Map //databases in Map
class Room extends EventEmitter { //clean? class Room extends EventEmitter {
constructor(server, _id, settings) { constructor(server, _id, settings) {
super(); super();
EventEmitter.call(this); EventEmitter.call(this);
@ -18,14 +18,19 @@ class Room extends EventEmitter { //clean?
color2: this.verifyColor(settings.color) || this.defaultLobbyColor2 color2: this.verifyColor(settings.color) || this.defaultLobbyColor2
} }
this.ppl = new Map(); this.ppl = new Map();
this.connections = [];
this.bindEventListeners(); this.bindEventListeners();
this.server.rooms.set(_id, this); this.server.rooms.set(_id, this);
} }
join(cl) { join(cl) {
let otheruser = this.connections.find((a) => a.user._id == cl.user._id)// Array.from(this.ppl.values()).find((a) => a.user._id == cl.user._id);//
if (!otheruser) {
let participantId = createKeccakHash('keccak256').update((Math.random().toString() + cl.ip)).digest('hex').substr(0, 24); let participantId = createKeccakHash('keccak256').update((Math.random().toString() + cl.ip)).digest('hex').substr(0, 24);
cl.user.id = participantId; cl.user.id = participantId;
cl.participantId = participantId; cl.participantId = participantId;
this.ppl.set(participantId, cl); this.ppl.set(participantId, cl);
this.connections.push(cl);
this.sendArray([{ this.sendArray([{
color: this.ppl.get(cl.participantId).user.color, color: this.ppl.get(cl.participantId).user.color,
id: this.ppl.get(cl.participantId).participantId, id: this.ppl.get(cl.participantId).participantId,
@ -36,20 +41,33 @@ class Room extends EventEmitter { //clean?
_id: cl.user._id _id: cl.user._id
}], cl) }], cl)
this.updateCh(cl); this.updateCh(cl);
} else {
cl.user.id = otheruser.participantId;
cl.participantId = otheruser.participantId;
this.connections.push(cl);
this.updateCh(cl);
}
} }
remove(p) { remove(p) {
//this.participants.splice(this.participants.findIndex((cl) => cl.participantId == p.participantId), 1); let otheruser = this.connections.filter((a) => a.user._id == p.user._id);//Array.from(this.ppl.values()).filter((a) => a.user._id == p._id);
if (!(otheruser.length > 1)) {
this.ppl.delete(p.participantId); this.ppl.delete(p.participantId);
this.connections.splice(this.connections.findIndex((a) => a.connectionid == p.connectionid), 1);
console.log(`Deleted client ${p.user.id}`);
this.sendArray([{ this.sendArray([{
m: "bye", m: "bye",
p: p.participantId p: p.participantId
}]); }]);
this.updateCh(); this.updateCh();
} else {
this.connections.splice(this.connections.findIndex((a) => a.connectionid == p.connectionid), 1);
}
} }
updateCh(cl) { updateCh(cl) {
if (this.ppl.keys().next().value.length <= 0) this.destroy(); if (Array.from(this.ppl.values()).length <= 0) this.destroy();
this.ppl.forEach((usr) => { this.connections.forEach((usr) => {
this.server.connections.get(usr.connectionid).sendArray([this.fetchData(usr, cl)]) this.server.connections.get(usr.connectionid).sendArray([this.fetchData(usr, cl)])
}) })
} }