forked from Hri7566/mpp-server-dev2
add better channel settings, add m event.
This commit is contained in:
parent
61e6625201
commit
78d23ec181
|
@ -22,6 +22,7 @@ class Client extends EventEmitter {
|
||||||
return this.ws && this.ws.readyState === WebSocket.CONNECTING;
|
return this.ws && this.ws.readyState === WebSocket.CONNECTING;
|
||||||
}
|
}
|
||||||
setChannel(_id, settings) {
|
setChannel(_id, settings) {
|
||||||
|
if (this.channel && this.channel._id == _id) return;
|
||||||
if (this.server.rooms.get(_id)) {
|
if (this.server.rooms.get(_id)) {
|
||||||
let channel = this.channel;
|
let channel = this.channel;
|
||||||
if (channel) this.channel.emit("bye", this);
|
if (channel) this.channel.emit("bye", this);
|
||||||
|
|
|
@ -23,10 +23,19 @@ cl.on("t", msg => {
|
||||||
}])
|
}])
|
||||||
})
|
})
|
||||||
cl.on("ch", msg => {
|
cl.on("ch", msg => {
|
||||||
if (!msg.hasOwnProperty("set")) msg.set = {};
|
if (!msg.hasOwnProperty("set") || !msg.set) msg.set = {};
|
||||||
if (msg.hasOwnProperty("_id") && typeof msg._id == "string") {
|
if (msg.hasOwnProperty("_id") && typeof msg._id == "string") {
|
||||||
if (msg._id.length > 512) return;
|
if (msg._id.length > 512) return;
|
||||||
cl.setChannel(msg._id, msg.set);
|
cl.setChannel(msg._id, msg.set);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
cl.on("m", msg => {
|
||||||
|
if (!(cl.channel && cl.participantId)) return;
|
||||||
|
if (!msg.hasOwnProperty("x")) msg.x = null;
|
||||||
|
if (!msg.hasOwnProperty("y")) msg.y = null;
|
||||||
|
if (parseInt(msg.x) == NaN) msg.x = null;
|
||||||
|
if (parseInt(msg.y) == NaN) msg.y = null;
|
||||||
|
cl.channel.emit("m", cl, msg.x, msg.y)
|
||||||
|
|
||||||
|
})
|
||||||
}
|
}
|
105
src/Room.js
105
src/Room.js
|
@ -9,27 +9,37 @@ class Room extends EventEmitter {
|
||||||
EventEmitter.call(this);
|
EventEmitter.call(this);
|
||||||
this._id = _id;
|
this._id = _id;
|
||||||
this.server = server;
|
this.server = server;
|
||||||
|
this.crown = null;
|
||||||
this.settings = {
|
this.settings = {
|
||||||
lobby: true,
|
lobby: this.isLobby(_id),
|
||||||
visible: settings.visible || true,
|
visible: settings.visible || true,
|
||||||
crownsolo: settings.crownsolo || false,
|
crownsolo: settings.crownsolo || false,
|
||||||
chat: settings.chat || true,
|
chat: settings.chat || true,
|
||||||
color: this.verifyColor(settings.color) || this.server.defaultRoomColor,
|
color: this.verifyColor(settings.color) || this.getColor(_id),
|
||||||
color2: this.verifyColor(settings.color) || this.defaultLobbyColor2
|
color2: this.verifyColor(settings.color) || this.getColor2(_id)
|
||||||
}
|
}
|
||||||
this.ppl = new Map();
|
this.ppl = new Map();
|
||||||
this.connections = [];
|
this.connections = [];
|
||||||
this.bindEventListeners();
|
this.bindEventListeners();
|
||||||
this.server.rooms.set(_id, this);
|
this.server.rooms.set(_id, this);
|
||||||
}
|
}
|
||||||
join(cl) {
|
join(cl) { //this stuff is complicated
|
||||||
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);//
|
let otheruser = this.connections.find((a) => a.user._id == cl.user._id)
|
||||||
if (!otheruser) {
|
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;
|
||||||
|
if (this.connections.length == 0 && Array.from(this.ppl.values()).length == 0) { //user that created the room, give them the crown.
|
||||||
|
this.crown = {
|
||||||
|
participantId: cl.participantId,
|
||||||
|
userId: cl.user._id,
|
||||||
|
time: Date.now(),
|
||||||
|
startPos: {x: 50, y: 50},
|
||||||
|
endPos: {x: this.getCrownX(), y: this.getCrownY()}
|
||||||
|
}
|
||||||
|
}
|
||||||
this.ppl.set(participantId, cl);
|
this.ppl.set(participantId, cl);
|
||||||
this.connections.push(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,
|
||||||
|
@ -44,13 +54,13 @@ class Room extends EventEmitter {
|
||||||
} else {
|
} else {
|
||||||
cl.user.id = otheruser.participantId;
|
cl.user.id = otheruser.participantId;
|
||||||
cl.participantId = otheruser.participantId;
|
cl.participantId = otheruser.participantId;
|
||||||
this.connections.push(cl);
|
this.connections.push(cl);
|
||||||
this.updateCh(cl);
|
this.updateCh(cl);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
remove(p) {
|
remove(p) { //this is complicated too
|
||||||
let otheruser = this.connections.filter((a) => a.user._id == p.user._id);//Array.from(this.ppl.values()).filter((a) => a.user._id == p._id);
|
let otheruser = this.connections.filter((a) => a.user._id == p.user._id);
|
||||||
if (!(otheruser.length > 1)) {
|
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);
|
this.connections.splice(this.connections.findIndex((a) => a.connectionid == p.connectionid), 1);
|
||||||
|
@ -58,28 +68,29 @@ remove(p) {
|
||||||
this.sendArray([{
|
this.sendArray([{
|
||||||
m: "bye",
|
m: "bye",
|
||||||
p: p.participantId
|
p: p.participantId
|
||||||
}]);
|
}], p);
|
||||||
this.updateCh();
|
this.updateCh();
|
||||||
} else {
|
} else {
|
||||||
this.connections.splice(this.connections.findIndex((a) => a.connectionid == p.connectionid), 1);
|
this.connections.splice(this.connections.findIndex((a) => a.connectionid == p.connectionid), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
updateCh(cl) {
|
updateCh(cl) { //update channel for all people in channel
|
||||||
if (Array.from(this.ppl.values()).length <= 0) this.destroy();
|
if (Array.from(this.ppl.values()).length <= 0) this.destroy();
|
||||||
this.connections.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)])
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
destroy() {
|
destroy() { //destroy room
|
||||||
this._id;
|
this._id;
|
||||||
console.log(`Deleted room ${this._id}`);
|
console.log(`Deleted room ${this._id}`);
|
||||||
this.settings = {};
|
this.settings = {};
|
||||||
this.ppl;
|
this.ppl;
|
||||||
this.server.rooms.delete(_id);
|
this.connnections;
|
||||||
|
this.server.rooms.delete(this._id);
|
||||||
}
|
}
|
||||||
sendArray(arr, not) {
|
sendArray(arr, not) {
|
||||||
this.ppl.forEach((usr) => {
|
this.connections.forEach((usr) => {
|
||||||
if (!not || usr.participantId != not.participantId) {
|
if (!not || usr.participantId != not.participantId) {
|
||||||
try {
|
try {
|
||||||
this.server.connections.get(usr.connectionid).sendArray(arr)
|
this.server.connections.get(usr.connectionid).sendArray(arr)
|
||||||
|
@ -96,8 +107,10 @@ fetchData(usr, cl) {
|
||||||
})
|
})
|
||||||
let data = {
|
let data = {
|
||||||
m: "ch",
|
m: "ch",
|
||||||
|
p: "ofo",
|
||||||
ch: {
|
ch: {
|
||||||
count: chppl.length,
|
count: chppl.length,
|
||||||
|
crown: this.crown,
|
||||||
settings: this.settings,
|
settings: this.settings,
|
||||||
_id: this._id
|
_id: this._id
|
||||||
},
|
},
|
||||||
|
@ -106,17 +119,75 @@ fetchData(usr, cl) {
|
||||||
if (cl) {
|
if (cl) {
|
||||||
if (usr.user.id == cl.user.id) {
|
if (usr.user.id == cl.user.id) {
|
||||||
data.p = cl.participantId;
|
data.p = cl.participantId;
|
||||||
|
} else {
|
||||||
|
delete data.p;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
delete data.p;
|
||||||
|
}
|
||||||
|
if (data.ch.crown == null) {
|
||||||
|
delete data.ch.crown;
|
||||||
}
|
}
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
verifyColor(color) {
|
verifyColor(color) {
|
||||||
return color; //TODO make this
|
return color; //TODO make this
|
||||||
}
|
}
|
||||||
|
getColor(_id) {
|
||||||
|
if (this.isLobby(_id)) {
|
||||||
|
return this.server.defaultLobbyColor;
|
||||||
|
} else {
|
||||||
|
return this.server.defaultRoomColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
getColor2(_id) {
|
||||||
|
if (this.isLobby(_id)) {
|
||||||
|
return this.server.defaultLobbyColor2;
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
delete this.settings.color2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
isLobby(_id) {
|
||||||
|
if (_id.startsWith("lobby")) {
|
||||||
|
if (_id == "lobby") {
|
||||||
|
return true;
|
||||||
|
} else if (parseFloat(_id.split("lobby")[1] % 1) === 0) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (_id.startsWith("test/")) {
|
||||||
|
if (_id == "test/") {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
getCrownY() {
|
||||||
|
return 50 - 30;
|
||||||
|
}
|
||||||
|
getCrownX() {
|
||||||
|
return 50;
|
||||||
|
}
|
||||||
|
setCords(p, x, y) {
|
||||||
|
if (p.participantId)
|
||||||
|
x ? this.ppl.get(p.participantId).x = x : {};
|
||||||
|
y ? this.ppl.get(p.participantId).y = y : {};
|
||||||
|
this.sendArray([{m: "m", id: p.participantId, x: this.ppl.get(p.participantId).x, y: this.ppl.get(p.participantId).y}], p);
|
||||||
|
}
|
||||||
bindEventListeners() {
|
bindEventListeners() {
|
||||||
this.on("bye", participant => {
|
this.on("bye", participant => {
|
||||||
this.remove(participant);
|
this.remove(participant);
|
||||||
})
|
})
|
||||||
|
|
||||||
|
this.on("m", (participant, x, y) => {
|
||||||
|
this.setCords(participant, x, y);
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue