xP: only care about RPC results if requested

This prevents "No response" errors from firing for most commands.
This commit is contained in:
Přemysl Eric Janouch 2022-09-21 14:22:47 +02:00
parent 919b12510b
commit 1f0e0b1ce4
Signed by: p
GPG Key ID: A0420B94F92B9493

View File

@ -4,7 +4,7 @@ import * as Relay from './proto.js'
// ---- RPC --------------------------------------------------------------------
class RelayRpc extends EventTarget {
class RelayRPC extends EventTarget {
constructor(url) {
super()
this.url = url
@ -72,7 +72,7 @@ class RelayRpc extends EventTarget {
if (this.promised[e.commandSeq] !== undefined)
this.promised[e.commandSeq].reject(e.error)
else
console.error("Unawaited error")
console.error(`Unawaited error: ${e.error}`)
break
case Relay.Event.Response:
if (this.promised[e.commandSeq] !== undefined)
@ -109,9 +109,16 @@ class RelayRpc extends EventTarget {
seq = this.commandSeq = 0
this.ws.send(JSON.stringify({commandSeq: seq, data: params}))
return new Promise((resolve, reject) => {
this.promised[seq] = {resolve, reject}
})
// Automagically detect if we want a result.
let data = undefined
const promise = new Promise(
(resolve, reject) => { data = {resolve, reject} })
promise.then = (...args) => {
this.promised[seq] = data
return Promise.prototype.then.call(promise, ...args)
}
return promise
}
}
@ -173,7 +180,7 @@ function updateIcon(highlighted) {
// ---- Event processing -------------------------------------------------------
let rpc = new RelayRpc(proxy)
let rpc = new RelayRPC(proxy)
let rpcEventHandlers = new Map()
let buffers = new Map()