Fix memory leak, move onAuth and onOk handlers to connection

This commit is contained in:
Jon Staab
2024-10-10 17:08:30 -07:00
parent edaf47ea35
commit 7aab6450b1
2 changed files with 21 additions and 7 deletions
+20 -3
View File
@@ -1,4 +1,4 @@
import {Emitter, Worker, sleep} from '@welshman/lib'
import {ctx, Emitter, Worker, sleep} from '@welshman/lib'
import {AuthStatus, ConnectionMeta} from './ConnectionMeta'
import {Socket, isMessage, asMessage} from './Socket'
import type {SocketMessage, Message} from './Socket'
@@ -93,6 +93,20 @@ export class Connection extends Emitter {
}
onReceive = (message: SocketMessage) => {
const [verb, ...extra] = asMessage(message)
if (verb === 'AUTH') {
const [challenge] = extra
ctx.net.onAuth(this.url, challenge)
}
if (verb === 'OK') {
const [id, ok, message] = extra
ctx.net.onOk(this.url, id, ok, message)
}
this.emit('receive', this, message)
}
@@ -120,11 +134,14 @@ export class Connection extends Emitter {
await Promise.race([
sleep(timeout),
new Promise<void>(resolve => {
this.on('receive', (cxn: Connection, message: Message) => {
const onReceive = (cxn: Connection, message: Message) => {
if (message[0] === 'OK' && message[2]) {
this.off('receive', onReceive)
resolve()
}
})
}
this.on('receive', onReceive)
})
])
}
+1 -4
View File
@@ -30,10 +30,7 @@ const createSubId = (prefix: string) => [prefix, Math.random().toString().slice(
export class Executor {
constructor(readonly target: Target) {
target.on('AUTH', ctx.net.onAuth)
target.on('OK', ctx.net.onOk)
}
constructor(readonly target: Target) {}
subscribe(filters: Filter[], {onEvent, onEose}: SubscribeOpts = {}) {
let closed = false