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();