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.
95 lines
2.0 KiB
95 lines
2.0 KiB
/* |
|
* https://github.com/morethanwords/tweb |
|
* Copyright (C) 2019-2021 Eduard Kuzmenko |
|
* https://github.com/morethanwords/tweb/blob/master/LICENSE |
|
*/ |
|
|
|
import {notifyAll} from '../../../helpers/context'; |
|
import EventListenerBase from '../../../helpers/eventListenerBase'; |
|
import {WorkerTaskVoidTemplate} from '../../../types'; |
|
import {MTConnection} from './transport'; |
|
|
|
let socketId = 0; |
|
export interface SocketProxyTask extends WorkerTaskVoidTemplate { |
|
type: 'socketProxy', |
|
payload: SocketProxySetupTask | SocketProxySendTask | SocketProxyCloseTask |
|
}; |
|
|
|
export interface SocketProxySetupTask extends WorkerTaskVoidTemplate { |
|
type: 'setup', |
|
payload: { |
|
dcId: number, |
|
url: string, |
|
logSuffix: string |
|
}, |
|
id: number |
|
}; |
|
|
|
export interface SocketProxySendTask extends WorkerTaskVoidTemplate { |
|
type: 'send', |
|
payload: Uint8Array, |
|
id: number |
|
}; |
|
|
|
export interface SocketProxyCloseTask extends WorkerTaskVoidTemplate { |
|
type: 'close', |
|
id: number |
|
}; |
|
|
|
// #if !MTPROTO_SW |
|
export default class SocketProxied extends EventListenerBase<{ |
|
open: () => void, |
|
message: (buffer: ArrayBuffer) => any, |
|
close: () => void, |
|
}> implements MTConnection { |
|
private id: number; |
|
|
|
constructor(protected dcId: number, protected url: string, logSuffix: string) { |
|
super(); |
|
this.id = ++socketId; |
|
socketsProxied.set(this.id, this); |
|
|
|
const task: SocketProxyTask = { |
|
type: 'socketProxy', |
|
payload: { |
|
type: 'setup', |
|
payload: { |
|
dcId, |
|
url, |
|
logSuffix |
|
}, |
|
id: this.id |
|
} |
|
}; |
|
|
|
notifyAll(task); |
|
} |
|
|
|
public send(payload: Uint8Array) { |
|
const task: SocketProxyTask = { |
|
type: 'socketProxy', |
|
payload: { |
|
type: 'send', |
|
payload, |
|
id: this.id |
|
} |
|
}; |
|
|
|
notifyAll(task); |
|
} |
|
|
|
public close() { |
|
const task: SocketProxyTask = { |
|
type: 'socketProxy', |
|
payload: { |
|
type: 'close', |
|
id: this.id |
|
} |
|
}; |
|
|
|
notifyAll(task); |
|
} |
|
} |
|
export const socketsProxied: Map<number, SocketProxied> = new Map(); |
|
|
|
// #endif
|
|
|