Fix crucial channel settings bug

This commit is contained in:
Hri7566 2024-03-09 13:03:37 -05:00
parent 3dd5201750
commit 5d5c10d7a5
4 changed files with 55 additions and 35 deletions

View File

@ -15,6 +15,7 @@ import Crown from "./Crown";
import { ChannelList } from "./ChannelList"; import { ChannelList } from "./ChannelList";
import { config } from "./config"; import { config } from "./config";
import { saveChatHistory, getChatHistory } from "../data/history"; import { saveChatHistory, getChatHistory } from "../data/history";
import { mixin } from "../util/helpers";
interface CachedKickban { interface CachedKickban {
userId: string; userId: string;
@ -23,9 +24,10 @@ interface CachedKickban {
} }
export class Channel extends EventEmitter { export class Channel extends EventEmitter {
private settings: Partial<IChannelSettings> = config.defaultSettings; private settings: Partial<IChannelSettings>;
private ppl = new Array<Participant>(); private ppl = new Array<Participant>();
public chatHistory = new Array<ClientEvents["a"]>(); public chatHistory = new Array<ClientEvents["a"]>();
private async loadChatHistory() { private async loadChatHistory() {
this.chatHistory = await getChatHistory(this.getID()); this.chatHistory = await getChatHistory(this.getID());
} }
@ -44,6 +46,8 @@ export class Channel extends EventEmitter {
) { ) {
super(); super();
this.settings = {};
mixin(this.settings, config.defaultSettings);
this.logger = new Logger("Channel - " + _id); this.logger = new Logger("Channel - " + _id);
// Validate settings in set // Validate settings in set
@ -51,7 +55,9 @@ export class Channel extends EventEmitter {
if (!this.isLobby()) { if (!this.isLobby()) {
if (set) { if (set) {
this.logger.debug("Passed settings:", set);
const validatedSet = validateChannelSettings(set); const validatedSet = validateChannelSettings(set);
this.logger.debug("Validated settings:", validatedSet);
for (const key of Object.keys(set)) { for (const key of Object.keys(set)) {
if ((validatedSet as any)[key] === false) continue; if ((validatedSet as any)[key] === false) continue;
@ -67,9 +73,7 @@ export class Channel extends EventEmitter {
if (part) this.giveCrown(part); if (part) this.giveCrown(part);
// } // }
} }
} } else {
if (this.isLobby()) {
this.settings = config.lobbySettings; this.settings = config.lobbySettings;
} }
@ -212,7 +216,9 @@ export class Channel extends EventEmitter {
parseInt(set.color.substring(5, 7), 16) - 0x40 parseInt(set.color.substring(5, 7), 16) - 0x40
); );
set.color2 = `#${r.toString(16).padStart(2, "0")}${g.toString(16).padStart(2, "0")}${b.toString(16).padStart(2, "0")}`; set.color2 = `#${r.toString(16).padStart(2, "0")}${g
.toString(16)
.padStart(2, "0")}${b.toString(16).padStart(2, "0")}`;
} }
if (this.isLobby() && !admin) return; if (this.isLobby() && !admin) return;
@ -305,12 +311,12 @@ export class Channel extends EventEmitter {
// Send our state data back // Send our state data back
socket.sendArray([ socket.sendArray([
{ // {
m: "ch", // m: "ch",
ch: this.getInfo(), // ch: this.getInfo(),
p: part.id, // p: part.id,
ppl: this.getParticipantList() // ppl: this.getParticipantList()
}, // },
{ {
m: "c", m: "c",
c: this.chatHistory.slice(-50) c: this.chatHistory.slice(-50)
@ -324,7 +330,8 @@ export class Channel extends EventEmitter {
} = socket.getCursorPos(); } = socket.getCursorPos();
// Broadcast a participant update for them // Broadcast a participant update for them
this.sendArray([ this.sendArray(
[
{ {
m: "p", m: "p",
_id: part._id, _id: part._id,
@ -334,10 +341,14 @@ export class Channel extends EventEmitter {
x: cursorPos.x, x: cursorPos.x,
y: cursorPos.y y: cursorPos.y
} }
]); ],
part.id
);
// Broadcast a channel update so everyone subscribed to the channel list can see us // Broadcast a channel update so everyone subscribed to the channel list can see us
this.emit("update", this); this.emit("update", this);
this.logger.debug("Settings:", this.settings);
} }
/** /**
@ -442,11 +453,16 @@ export class Channel extends EventEmitter {
* @param arr List of events to send to clients * @param arr List of events to send to clients
*/ */
public sendArray<EventID extends keyof ClientEvents>( public sendArray<EventID extends keyof ClientEvents>(
arr: ClientEvents[EventID][] arr: ClientEvents[EventID][],
blockPartID?: string
) { ) {
let sentSocketIDs = new Array<string>(); let sentSocketIDs = new Array<string>();
for (const p of this.ppl) { for (const p of this.ppl) {
if (blockPartID) {
if (p.id == blockPartID) continue;
}
socketLoop: for (const socket of socketsBySocketID.values()) { socketLoop: for (const socket of socketsBySocketID.values()) {
if (socket.isDestroyed()) continue socketLoop; if (socket.isDestroyed()) continue socketLoop;
if (socket.getParticipantID() != p.id) continue socketLoop; if (socket.getParticipantID() != p.id) continue socketLoop;

View File

@ -57,3 +57,9 @@ export function spoop_text(message: string) {
} }
return message; return message;
} }
export function mixin(obj1: any, obj2: any) {
for (const key of Object.keys(obj2)) {
obj1[key] = obj2[key];
}
}

View File

@ -29,11 +29,11 @@ Command.addCommand(
Command.addCommand( Command.addCommand(
new Command(["memory", "mem"], "memory", msg => { new Command(["memory", "mem"], "memory", msg => {
const mem = process.memoryUsage(); const mem = process.memoryUsage();
return `Memory: ${(mem.heapUsed / 1000 / 1000).toFixed(2)} MB used / ${( return `Memory: ${(mem.heapUsed / 1000 / 1000).toFixed(2)} MB / ${(
mem.heapTotal / mem.heapTotal /
1000 / 1000 /
1000 1000
).toFixed(2)} MB total`; ).toFixed(2)} MB / ${(mem.rss / 1000 / 1000).toFixed(2)} MB`;
}) })
); );
@ -62,13 +62,11 @@ Command.addCommand(
} else if (msg.args[1] == "users") { } else if (msg.args[1] == "users") {
var user = getUsers(); var user = getUsers();
var users = ""; var users = "";
((await user).users).forEach(u => { (await user).users.forEach(u => {
users += `\n- [${u.id}]: ${u.name}` users += `\n- [${u.id}]: ${u.name}`;
}) });
return ( return "Users: " + (await (await user).count) + users;
"Users: "+await (await user).count + users
)
} else { } else {
return "list <channels, users>"; return "list <channels, users>";
} }

View File

@ -242,7 +242,7 @@ export class Socket extends EventEmitter {
_id: facadeID, _id: facadeID,
name: this.user.name, name: this.user.name,
color: this.user.color, color: this.user.color,
id: this.id id: this.getParticipantID()
}; };
} else { } else {
return null; return null;