Compare commits

..

No commits in common. "bac593dcef6e1ea10e0588a1660f1b70269dfa7f" and "9fcc3864c05df59cd585b950377cca26b5c9bd76" have entirely different histories.

10 changed files with 35 additions and 102 deletions

View File

@ -31,7 +31,7 @@ import {
getSavedChannel, getSavedChannel,
saveChannel saveChannel
} from "../data/channel"; } from "../data/channel";
import { forceloadChannel } from "./forceload"; import { forceloadChannel } from "./forceLoad";
interface CachedKickban { interface CachedKickban {
userId: string; userId: string;
@ -91,8 +91,7 @@ export class Channel extends EventEmitter {
const data = { const data = {
id: info._id, id: info._id,
settings: JSON.stringify(info.settings), settings: JSON.stringify(info.settings),
flags: JSON.stringify(this.flags), flags: JSON.stringify(this.flags)
forceload: this.stays
}; };
//this.logger.debug("Channel data to save:", data); //this.logger.debug("Channel data to save:", data);
@ -206,7 +205,6 @@ export class Channel extends EventEmitter {
} }
private alreadyBound = false; private alreadyBound = false;
private destroyTimeout: Timer | undefined;
private bindEventListeners() { private bindEventListeners() {
if (this.alreadyBound) return; if (this.alreadyBound) return;
@ -216,12 +214,6 @@ export class Channel extends EventEmitter {
this.logger.info("Loaded chat history"); this.logger.info("Loaded chat history");
this.on("update", (self, uuid) => { this.on("update", (self, uuid) => {
// Propogate channel flags intended to be updated
if (typeof this.flags.owner_id === "string") {
this.settings.owner_id = this.flags.owner_id;
}
// this.logger.debug("update");
// Send updated info // Send updated info
for (const socket of socketsByUUID.values()) { for (const socket of socketsByUUID.values()) {
for (const p of this.ppl) { for (const p of this.ppl) {
@ -241,20 +233,13 @@ export class Channel extends EventEmitter {
if (this.ppl.length === 0 && !this.stays) { if (this.ppl.length === 0 && !this.stays) {
if (config.channelDestroyTimeout) { if (config.channelDestroyTimeout) {
this.destroyTimeout = setTimeout(() => { setTimeout(() => {
this.destroy(); this.destroy();
}, config.channelDestroyTimeout); }, config.channelDestroyTimeout);
} else { } else {
this.destroy(); this.destroy();
} }
} }
if (
this.ppl.length > 0 &&
typeof this.destroyTimeout !== "undefined"
) {
clearTimeout(this.destroyTimeout);
}
}); });
const BANNED_WORDS = ["AMIGHTYWIND", "CHECKLYHQ"]; const BANNED_WORDS = ["AMIGHTYWIND", "CHECKLYHQ"];
@ -685,7 +670,7 @@ export class Channel extends EventEmitter {
if (p) { if (p) {
// Give the crown back // Give the crown back
this.giveCrown(p, true, true); this.giveCrown(p, true, false);
} }
} }
} }
@ -731,8 +716,7 @@ export class Channel extends EventEmitter {
// Broadcast a channel update so everyone subscribed to the channel list can see the new user count // Broadcast a channel update so everyone subscribed to the channel list can see the new user count
//this.emit("update", this, socket.getUUID()); //this.emit("update", this, socket.getUUID());
//this.logger.debug("Update from join"); //this.logger.debug("Update from join");
// this.emit("update", this); this.emit("update", this);
socket.sendChannelUpdate(this.getInfo(), this.getParticipantList());
//this.logger.debug("Settings:", this.settings); //this.logger.debug("Settings:", this.settings);
if (this.settings.owner_id === part._id) { if (this.settings.owner_id === part._id) {
@ -746,8 +730,7 @@ export class Channel extends EventEmitter {
*/ */
public leave(socket: Socket) { public leave(socket: Socket) {
// this.logger.debug("Leave called"); // this.logger.debug("Leave called");
const part = socket.getParticipant(); const part = socket.getParticipant() as IParticipant;
if (!part) return;
let dupeCount = 0; let dupeCount = 0;
for (const s of socketsByUUID.values()) { for (const s of socketsByUUID.values()) {
@ -763,31 +746,27 @@ export class Channel extends EventEmitter {
if (dupeCount === 1) { if (dupeCount === 1) {
const p = this.ppl.find(p => p.id === socket.getParticipantID()); const p = this.ppl.find(p => p.id === socket.getParticipantID());
let hadCrown = false;
if (p) { if (p) {
this.ppl.splice(this.ppl.indexOf(p), 1); this.ppl.splice(this.ppl.indexOf(p), 1);
if (this.crown) { if (this.crown) {
if (this.crown.participantId === p.id) { if (this.crown.participantId === p.id) {
// Channel owner left, reset crown timeout // Channel owner left, reset crown timeout
hadCrown = true;
this.chown(); this.chown();
} }
} }
} }
// Broadcast bye // Broadcast bye
if (!hadCrown) this.sendArray([
this.sendArray([ {
{ m: "bye",
m: "bye", p: part.id
p: part.id }
} ]);
]);
//this.logger.debug("Update from leave"); //this.logger.debug("Update from leave");
// this.emit("update", this); this.emit("update", this);
} else { } else {
for (const p of this.ppl) { for (const p of this.ppl) {
if (!p.uuids.includes(socket.getUUID())) continue; if (!p.uuids.includes(socket.getUUID())) continue;
@ -967,7 +946,6 @@ export class Channel extends EventEmitter {
*/ */
public destroy() { public destroy() {
if (this.destroyed) return; if (this.destroyed) return;
this.destroyed = true; this.destroyed = true;
if (this.ppl.length > 0) { if (this.ppl.length > 0) {
@ -1021,7 +999,7 @@ export class Channel extends EventEmitter {
this.crown.time = Date.now(); this.crown.time = Date.now();
if (update) { if (update) {
// this.logger.debug("Update from giveCrown"); //this.logger.debug("Update from giveCrown");
this.emit("update", this); this.emit("update", this);
} }
} }
@ -1330,8 +1308,6 @@ export class Channel extends EventEmitter {
val: TChannelFlags[K] val: TChannelFlags[K]
) { ) {
this.flags[key] = val; this.flags[key] = val;
this.logger.debug("Updating channel flag " + key + " to", val);
this.emit("update", this);
} }
/** /**
@ -1394,11 +1370,6 @@ export class Channel extends EventEmitter {
).toFixed(2)}M` ).toFixed(2)}M`
); );
} }
public setForceload(enable: boolean) {
this.stays = enable;
this.save();
}
} }
export default Channel; export default Channel;

View File

@ -14,15 +14,9 @@ const logger = new Logger("Channel Forceloader");
*/ */
export function forceloadChannel(id: string) { export function forceloadChannel(id: string) {
try { try {
const existing = ChannelList.getChannel(id); logger.info("Forceloading", id);
if (existing) { new Channel(id, undefined, undefined, undefined, true);
logger.info("Keeping", id, "forceloaded"); return true;
existing.setForceload(true);
} else {
logger.info("Forceloading", id);
new Channel(id, undefined, undefined, undefined, true);
return true;
}
} catch (err) { } catch (err) {
return false; return false;
} }

View File

@ -15,7 +15,7 @@
// If you don't load the server first, bun will literally segfault // If you don't load the server first, bun will literally segfault
import "./ws/server"; import "./ws/server";
import { loadForcedStartupChannels } from "./channel/forceload"; import { loadForcedStartupChannels } from "./channel/forceLoad";
import { Logger } from "./util/Logger"; import { Logger } from "./util/Logger";
// docker hates this next one // docker hates this next one
import { startReadline } from "./util/readline"; import { startReadline } from "./util/readline";

5
src/util/types.d.ts vendored
View File

@ -281,11 +281,6 @@ declare interface IncomingSocketEvents {
_id: string; _id: string;
}; };
unforceload: {
m: "unforceload";
_id: string;
};
ch_flag: { ch_flag: {
m: "ch_flag"; m: "ch_flag";
_id?: string; _id?: string;

View File

@ -861,7 +861,7 @@ export class Socket extends EventEmitter {
} }
/** /**
* Allow custom messages to be sent and received from this socket * Start sending this socket the list of channels periodically
**/ **/
public subscribeToCustom() { public subscribeToCustom() {
if (this.isSubscribedToCustom) return; if (this.isSubscribedToCustom) return;
@ -869,7 +869,7 @@ export class Socket extends EventEmitter {
} }
/** /**
* Disallow custom messages to be sent and received from this socket * Stop sending this socket the list of channels periodically
**/ **/
public unsubscribeFromCustom() { public unsubscribeFromCustom() {
if (!this.isSubscribedToCustom) return; if (!this.isSubscribedToCustom) return;

View File

@ -1,9 +1,6 @@
import { Logger } from "~/util/Logger";
import { ChannelList } from "../../../../channel/ChannelList"; import { ChannelList } from "../../../../channel/ChannelList";
import { ServerEventListener, TChannelFlags } from "../../../../util/types"; import { ServerEventListener, TChannelFlags } from "../../../../util/types";
const logger = new Logger("Channel flag input");
export const ch_flag: ServerEventListener<"ch_flag"> = { export const ch_flag: ServerEventListener<"ch_flag"> = {
id: "ch_flag", id: "ch_flag",
callback: async (msg, socket) => { callback: async (msg, socket) => {
@ -20,7 +17,7 @@ export const ch_flag: ServerEventListener<"ch_flag"> = {
if (typeof msg.key !== "string") return; if (typeof msg.key !== "string") return;
if (typeof msg.value === "undefined") return; if (typeof msg.value === "undefined") return;
const ch = ChannelList.getChannel(chid); const ch = ChannelList.getList().find(c => c.getID() == chid);
if (!ch) return; if (!ch) return;
ch.setFlag( ch.setFlag(

View File

@ -1,5 +1,5 @@
import { forceloadChannel } from "~/channel/forceload"; import { forceloadChannel } from "../../../../channel/forceLoad";
import { ServerEventListener } from "~/util/types"; import { ServerEventListener } from "../../../../util/types";
export const forceload: ServerEventListener<"forceload"> = { export const forceload: ServerEventListener<"forceload"> = {
id: "forceload", id: "forceload",

View File

@ -1,12 +0,0 @@
import { forceloadChannel, unforceloadChannel } from "~/channel/forceload";
import { ServerEventListener } from "~/util/types";
export const unforceload: ServerEventListener<"unforceload"> = {
id: "unforceload",
callback: async (msg, socket) => {
// Unforceload channel
if (typeof msg._id !== "string") return;
unforceloadChannel(msg._id);
}
};

View File

@ -1,20 +1,17 @@
import { EventGroup, eventGroups } from "../../events"; import { EventGroup, eventGroups } from "../../events";
import { admin_chat } from "./handlers/admin_chat"; import { admin_chat } from "./handlers/admin_chat";
import { ch_flag } from "./handlers/ch_flag";
import { clear_chat } from "./handlers/clear_chat"; import { clear_chat } from "./handlers/clear_chat";
export const EVENT_GROUP_ADMIN = new EventGroup("admin"); export const EVENT_GROUP_ADMIN = new EventGroup("admin");
import { color } from "./handlers/color"; import { color } from "./handlers/color";
import { eval_msg } from "./handlers/eval"; import { eval_msg } from "./handlers/eval";
import { forceload } from "./handlers/forceload";
import { move } from "./handlers/move"; import { move } from "./handlers/move";
import { name } from "./handlers/name"; import { name } from "./handlers/name";
import { notification } from "./handlers/notification"; import { notification } from "./handlers/notification";
import { rename_channel } from "./handlers/rename_channel"; import { rename_channel } from "./handlers/rename_channel";
import { restart } from "./handlers/restart"; import { restart } from "./handlers/restart";
import { tag } from "./handlers/tag"; import { tag } from "./handlers/tag";
import { unforceload } from "./handlers/unforceload";
import { user_flag } from "./handlers/user_flag"; import { user_flag } from "./handlers/user_flag";
// EVENT_GROUP_ADMIN.add(color); // EVENT_GROUP_ADMIN.add(color);
@ -22,20 +19,17 @@ import { user_flag } from "./handlers/user_flag";
// EVENT_GROUP_ADMIN.add(user_flag); // EVENT_GROUP_ADMIN.add(user_flag);
EVENT_GROUP_ADMIN.addMany( EVENT_GROUP_ADMIN.addMany(
color, color,
name, name,
user_flag, user_flag,
clear_chat, clear_chat,
notification, notification,
restart, restart,
move, move,
rename_channel, rename_channel,
admin_chat, admin_chat,
eval_msg, eval_msg,
tag, tag
ch_flag,
forceload,
unforceload
); );
eventGroups.push(EVENT_GROUP_ADMIN); eventGroups.push(EVENT_GROUP_ADMIN);

View File

@ -17,9 +17,6 @@ import { kickban } from "./handlers/kickban";
import { bye } from "./handlers/bye"; import { bye } from "./handlers/bye";
import { chown } from "./handlers/chown"; import { chown } from "./handlers/chown";
import { unban } from "./handlers/unban"; import { unban } from "./handlers/unban";
import { plus_custom } from "./handlers/+custom";
import { minus_custom } from "./handlers/-custom";
import { custom } from "./handlers/custom";
// Imagine not having an "addMany" function... // Imagine not having an "addMany" function...
@ -51,10 +48,7 @@ EVENTGROUP_USER.addMany(
kickban, kickban,
unban, unban,
bye, bye,
chown, chown
plus_custom,
minus_custom,
custom
); );
eventGroups.push(EVENTGROUP_USER); eventGroups.push(EVENTGROUP_USER);