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
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[]); |
|
} |
|
} |
|
}
|
|
|