*Store channel as a private property

*Bind all callbacks to the current peer
This commit is contained in:
Derrick Hammer 2023-03-02 05:25:50 -05:00
parent 1d4cb917c5
commit 4220037402
Signed by: pcfreak30
GPG Key ID: C997C339BE476FF2
1 changed files with 10 additions and 8 deletions

View File

@ -42,6 +42,8 @@ export default class Peer {
private _onclose: OnClose; private _onclose: OnClose;
private _emulateWebsocket: boolean; private _emulateWebsocket: boolean;
private _channel?: any;
constructor({ constructor({
proxy, proxy,
peer, peer,
@ -55,10 +57,10 @@ export default class Peer {
this._proxy = proxy; this._proxy = proxy;
this._peer = peer; this._peer = peer;
this._muxer = muxer; this._muxer = muxer;
this._onopen = onopen; this._onopen = onopen?.bind(this);
this._onreceive = onreceive; this._onreceive = onreceive?.bind(this);
this._onsend = onsend; this._onsend = onsend?.bind(this);
this._onclose = onclose; this._onclose = onclose?.bind(this);
this._emulateWebsocket = emulateWebsocket; this._emulateWebsocket = emulateWebsocket;
} }
@ -69,7 +71,7 @@ export default class Peer {
cb(); cb();
}; };
const self = this; const self = this;
const channel = this._muxer.createChannel({ this._channel = this._muxer.createChannel({
protocol: this._proxy.protocol, protocol: this._proxy.protocol,
async onopen(m: any) { async onopen(m: any) {
if (!m) { if (!m) {
@ -86,7 +88,7 @@ export default class Peer {
write, write,
emulateWebsocket: self._emulateWebsocket, emulateWebsocket: self._emulateWebsocket,
}); });
self._socket.on("end", () => channel.close()); self._socket.on("end", () => this._channel.close());
let ret = await self._onopen?.(self._socket, m); let ret = await self._onopen?.(self._socket, m);
if (!ret || (ret && ret.connect === false)) { if (!ret || (ret && ret.connect === false)) {
// @ts-ignore // @ts-ignore
@ -100,7 +102,7 @@ export default class Peer {
await self._onclose?.(self._socket); await self._onclose?.(self._socket);
}, },
}); });
const pipe = channel.addMessage({ const pipe = this._channel.addMessage({
async onmessage(m: any) { async onmessage(m: any) {
if (m instanceof Uint8Array) { if (m instanceof Uint8Array) {
m = Buffer.from(m); m = Buffer.from(m);
@ -110,6 +112,6 @@ export default class Peer {
}, },
}); });
await channel.open(); await this._channel.open();
} }
} }