fix: remove error cb handling for socket.send() calls

Fixes promise not ever being resolved
This commit is contained in:
PalmDevs
2024-03-29 19:51:19 +07:00
parent 6abb740994
commit 29544d4e01
3 changed files with 78 additions and 90 deletions

View File

@@ -34,14 +34,10 @@ export default class Client {
op: ServerOperation.Hello, op: ServerOperation.Hello,
d: null, d: null,
}) })
.then(() => {
this._listen() this._listen()
this.ready = true this.ready = true
this.#emitter.emit('ready') this.#emitter.emit('ready')
})
.catch(() => {
this.disconnect(DisconnectReason.ServerError)
})
} }
on<TOpName extends keyof ClientEventHandlers>(name: TOpName, handler: ClientEventHandlers[typeof name]) { on<TOpName extends keyof ClientEventHandlers>(name: TOpName, handler: ClientEventHandlers[typeof name]) {
@@ -57,12 +53,9 @@ export default class Client {
} }
send<TOp extends ServerOperation>(packet: Omit<Packet<TOp>, 's'>, sequence?: number) { send<TOp extends ServerOperation>(packet: Omit<Packet<TOp>, 's'>, sequence?: number) {
return new Promise<void>((resolve, reject) => {
this.#throwIfDisconnected('Cannot send packet to client that has already disconnected') this.#throwIfDisconnected('Cannot send packet to client that has already disconnected')
this.#socket.send( this.#socket.send(serializePacket({ ...packet, s: sequence ?? this.currentSequence++ } as Packet<TOp>), err => {
serializePacket({ ...packet, s: sequence ?? this.currentSequence++ } as Packet<TOp>), throw err
err => (err ? reject(err) : resolve()),
)
}) })
} }

View File

@@ -39,14 +39,13 @@ export default class Client {
async parseText(text: string) { async parseText(text: string) {
this.#throwIfNotReady() this.#throwIfNotReady()
return await this.ws this.ws.send({
.send({
op: ClientOperation.ParseText, op: ClientOperation.ParseText,
d: { d: {
text, text,
}, },
}) })
.then(() => {
// Since we don't have heartbeats anymore, this is fine. // Since we don't have heartbeats anymore, this is fine.
// But if we add anything similar, this will cause another race condition // But if we add anything similar, this will cause another race condition
// To fix this, we can try adding a instanced function that would return the currentSequence // To fix this, we can try adding a instanced function that would return the currentSequence
@@ -66,7 +65,6 @@ export default class Client {
.catch(() => { .catch(() => {
throw new Error('Failed to parse text, the API did not respond in time') throw new Error('Failed to parse text, the API did not respond in time')
}) })
})
} }
/** /**
@@ -77,14 +75,13 @@ export default class Client {
async parseImage(url: string) { async parseImage(url: string) {
this.#throwIfNotReady() this.#throwIfNotReady()
return await this.ws this.ws.send({
.send({
op: ClientOperation.ParseImage, op: ClientOperation.ParseImage,
d: { d: {
image_url: url, image_url: url,
}, },
}) })
.then(() => {
// See line 48 // See line 48
const expectedNextSeq = this.ws.currentSequence + 1 const expectedNextSeq = this.ws.currentSequence + 1
const awaitPkt = (op: ServerOperation, timeout = this.ws.timeout) => const awaitPkt = (op: ServerOperation, timeout = this.ws.timeout) =>
@@ -101,21 +98,19 @@ export default class Client {
.catch(() => { .catch(() => {
throw new Error('Failed to parse image, the API did not respond in time') throw new Error('Failed to parse image, the API did not respond in time')
}) })
})
} }
async trainMessage(text: string, label: string) { async trainMessage(text: string, label: string) {
this.#throwIfNotReady() this.#throwIfNotReady()
return await this.ws this.ws.send({
.send({
op: ClientOperation.TrainMessage, op: ClientOperation.TrainMessage,
d: { d: {
label, label,
text, text,
}, },
}) })
.then(() => {
// See line 48 // See line 48
const expectedNextSeq = this.ws.currentSequence + 1 const expectedNextSeq = this.ws.currentSequence + 1
const awaitPkt = (op: ServerOperation, timeout = this.ws.timeout) => const awaitPkt = (op: ServerOperation, timeout = this.ws.timeout) =>
@@ -132,7 +127,6 @@ export default class Client {
.catch(() => { .catch(() => {
throw new Error('Failed to train message, the API did not respond in time') throw new Error('Failed to train message, the API did not respond in time')
}) })
})
} }
/** /**

View File

@@ -49,6 +49,7 @@ export class ClientWebSocketManager {
}, this.timeout) }, this.timeout)
this.#socket.on('open', () => { this.#socket.on('open', () => {
this.disconnected = false
clearTimeout(timeout) clearTimeout(timeout)
this.#listen() this.#listen()
rs() rs()
@@ -107,9 +108,9 @@ export class ClientWebSocketManager {
send<TOp extends ClientOperation>(packet: Packet<TOp>) { send<TOp extends ClientOperation>(packet: Packet<TOp>) {
this.#throwIfDisconnected('Cannot send a packet when already disconnected from the server') this.#throwIfDisconnected('Cannot send a packet when already disconnected from the server')
return new Promise<void>((resolve, reject) => this.#socket.send(serializePacket(packet), err => {
this.#socket.send(serializePacket(packet), err => (err ? reject(err) : resolve())), throw err
) })
} }
/** /**