Telegram Web K with changes to work inside I2P https://web.telegram.i2p/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

68 lines
1.8 KiB

/*
* https://github.com/morethanwords/tweb
* Copyright (C) 2019-2021 Eduard Kuzmenko
* https://github.com/morethanwords/tweb/blob/master/LICENSE
*/
import { IS_SAFARI } from "../../environment/userAgent";
import EventListenerBase from "../../helpers/eventListenerBase";
export default class QueryableWorker extends EventListenerBase<{
ready: () => void,
frame: (reqId: number, frameNo: number, frame: Uint8ClampedArray) => void,
loaded: (reqId: number, frameCount: number, fps: number) => void,
error: (reqId: number, error: Error) => void,
workerError: (error: ErrorEvent) => void
}> {
constructor(private worker: Worker) {
super();
this.worker.onerror = (error) => {
try {
this.dispatchEvent('workerError', error);
this.cleanup();
this.terminate();
} catch(err) {
}
};
this.worker.onmessage = (event) => {
this.dispatchEvent(event.data.queryMethodListener, ...event.data.queryMethodArguments);
};
}
public postMessage(message: any) {
this.worker.postMessage(message);
}
public terminate() {
this.worker.terminate();
}
public sendQuery(queryMethod: string, ...args: any[]) {
if(IS_SAFARI) {
this.worker.postMessage({
queryMethod: queryMethod,
queryMethodArguments: args
});
} else {
const transfer: (ArrayBuffer | OffscreenCanvas)[] = [];
args.forEach(arg => {
if(arg instanceof ArrayBuffer) {
transfer.push(arg);
}
if(typeof(arg) === 'object' && arg.buffer instanceof ArrayBuffer) {
transfer.push(arg.buffer);
}
});
//console.log('transfer', transfer);
this.worker.postMessage({
queryMethod: queryMethod,
queryMethodArguments: args
}, transfer as Transferable[]);
}
}
}