Revert "cvmts: rate limit the 'sync' instruction"

This reverts commit 199924ff92.

nvm the decade old shitcode webapp that people seem to still flock to for NO reason breaks
honestly why do we even support that hunk of trash it's a decade old, falling apart, and all it does
is stifle progress if anything
This commit is contained in:
modeco80
2024-10-05 05:11:02 -04:00
parent 199924ff92
commit 25ed0515dd

View File

@@ -30,9 +30,6 @@ const kCVMTSAssetsRoot = path.resolve(__dirname, '../../assets');
const kRestartTimeout = 5000; const kRestartTimeout = 5000;
// Rate in milliseconds that the 'sync' instruction should be sent to users.
const kSyncRateMs = 500;
type ChatHistory = { type ChatHistory = {
user: string; user: string;
msg: string; msg: string;
@@ -88,8 +85,6 @@ export default class CollabVMServer {
private ModPerms: number; private ModPerms: number;
private VM: VM; private VM: VM;
private lastSync: number = Date.now();
// Authentication manager // Authentication manager
private auth: AuthManager | null; private auth: AuthManager | null;
@@ -99,6 +94,9 @@ export default class CollabVMServer {
// Ban manager // Ban manager
private banmgr: BanManager; private banmgr: BanManager;
// queue of rects, reset every frame
private rectQueue: Rect[] = [];
private logger = pino({ name: 'CVMTS.Server' }); private logger = pino({ name: 'CVMTS.Server' });
constructor(config: IConfig, vm: VM, banmgr: BanManager, auth: AuthManager | null, geoipReader: ReaderModel | null) { constructor(config: IConfig, vm: VM, banmgr: BanManager, auth: AuthManager | null, geoipReader: ReaderModel | null) {
@@ -141,6 +139,7 @@ export default class CollabVMServer {
// add events // add events
self.VM.GetDisplay()?.on('resize', (size: Size) => self.OnDisplayResized(size)); self.VM.GetDisplay()?.on('resize', (size: Size) => self.OnDisplayResized(size));
self.VM.GetDisplay()?.on('rect', (rect: Rect) => self.OnDisplayRectangle(rect)); self.VM.GetDisplay()?.on('rect', (rect: Rect) => self.OnDisplayRectangle(rect));
self.VM.GetDisplay()?.on('frame', () => self.OnDisplayFrame());
} }
} }
@@ -850,7 +849,20 @@ export default class CollabVMServer {
} }
} }
private async OnDisplayRectangle(rect: Rect) { private OnDisplayRectangle(rect: Rect) {
this.rectQueue.push(rect);
}
private OnDisplayResized(size: Size) {
this.clients
.filter((c) => c.connectedToNode || c.viewMode == 1)
.forEach((c) => {
if (this.screenHidden && c.rank == Rank.Unregistered) return;
c.sendMsg(cvm.guacEncode('size', '0', size.width.toString(), size.height.toString()));
});
}
private async OnDisplayFrame() {
let self = this; let self = this;
let doRect = async (rect: Rect) => { let doRect = async (rect: Rect) => {
@@ -875,35 +887,20 @@ export default class CollabVMServer {
c.socket.sendBinary(encodedbin); c.socket.sendBinary(encodedbin);
} else { } else {
c.sendMsg(cvm.guacEncode('png', '0', '0', rect.x.toString(), rect.y.toString(), encodedb64)); c.sendMsg(cvm.guacEncode('png', '0', '0', rect.x.toString(), rect.y.toString(), encodedb64));
c.sendMsg(cvm.guacEncode('sync', Date.now().toString()));
} }
}); });
}; };
await Promise.all([doRect(rect)]); let promises: Promise<void>[] = [];
// Send a sync if the time since the last sync has hit or went above the rate for (let rect of self.rectQueue) promises.push(doRect(rect));
// to send one
let syncDeltaMs = Date.now() - self.lastSync;
if (syncDeltaMs >= kSyncRateMs) {
let syncNow = Date.now();
self.clients
.filter((c) => c.connectedToNode || c.viewMode == 1)
.forEach((c) => {
if (self.screenHidden && c.rank == Rank.Unregistered) return;
c.sendMsg(cvm.guacEncode('sync', syncNow.toString()));
});
self.lastSync = syncNow; // javascript is a very solidly designed language with no holes
} // or usability traps inside of it whatsoever
} this.rectQueue.length = 0;
private OnDisplayResized(size: Size) { await Promise.all(promises);
this.clients
.filter((c) => c.connectedToNode || c.viewMode == 1)
.forEach((c) => {
if (this.screenHidden && c.rank == Rank.Unregistered) return;
c.sendMsg(cvm.guacEncode('size', '0', size.width.toString(), size.height.toString()));
});
} }
private async SendFullScreenWithSize(client: User) { private async SendFullScreenWithSize(client: User) {