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:
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user