From fa6099f1d6315d3bb226caee1cd094b1ae965616 Mon Sep 17 00:00:00 2001 From: Koushik Dutta Date: Fri, 28 Oct 2022 10:15:58 -0700 Subject: [PATCH] rpc: add support for setting properties on RpcProxy --- server/src/rpc.ts | 8 +++++++- server/test/rpc-proxy-set.ts | 23 +++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 server/test/rpc-proxy-set.ts diff --git a/server/src/rpc.ts b/server/src/rpc.ts index ee5f600ec..473c526b1 100644 --- a/server/src/rpc.ts +++ b/server/src/rpc.ts @@ -109,8 +109,14 @@ class RpcProxy implements PrimitiveProxyHandler { } set(target: any, p: string | symbol, value: any, receiver: any): boolean { - if (p === RpcPeer.finalizerIdSymbol) + if (p === RpcPeer.finalizerIdSymbol) { this.entry.finalizerId = value; + } + else { + this.proxyProps ||= {}; + this.proxyProps[p] = value; + } + return true; } diff --git a/server/test/rpc-proxy-set.ts b/server/test/rpc-proxy-set.ts new file mode 100644 index 000000000..fb49d304f --- /dev/null +++ b/server/test/rpc-proxy-set.ts @@ -0,0 +1,23 @@ +import { RpcPeer } from "../src/rpc"; + +const p1 = new RpcPeer('p1', 'p2', message => { + p2.handleMessage(message); +}); + +const p2 = new RpcPeer('p2', 'p1', message => { + p1.handleMessage(message); +}); + +class Foo { +} + +p1.params['thing'] = new Foo(); + +async function test() { + const foo = await p2.getParam('thing'); + foo.bar = 3; + if (foo.bar !== 3) + throw new Error('proxy custom property set failed'); +} + +test();