diff --git a/server/python/rpc.py b/server/python/rpc.py index 16db4eead..45515dbe8 100644 --- a/server/python/rpc.py +++ b/server/python/rpc.py @@ -72,7 +72,7 @@ class RpcProxy(object): def __setattr__(self, name: str, value: Any) -> None: if name == '__proxy_finalizer_id': - self.dict['__proxy_entry']['finalizerId'] = value + self.__dict__['__proxy_entry']['finalizerId'] = value return super().__setattr__(name, value) @@ -241,7 +241,7 @@ class RpcPeer: if not proxy: proxy = self.newProxy(__remote_proxy_id, __remote_constructor_name, __remote_proxy_props, __remote_proxy_oneway_methods) - proxy.__proxy_finalizer_id = __remote_proxy_finalizer_id + setattr(proxy, '__proxy_finalizer_id', __remote_proxy_finalizer_id) return proxy if __local_proxy_id: diff --git a/server/src/rpc.ts b/server/src/rpc.ts index b4503f74c..ef3dc044e 100644 --- a/server/src/rpc.ts +++ b/server/src/rpc.ts @@ -84,7 +84,7 @@ class RpcProxy implements PrimitiveProxyHandler { } get(target: any, p: PropertyKey, receiver: any): any { - if (p === '__proxy_id') + if (p === RpcPeer.PROPERTY_PROXY_ID) return this.entry.id; if (p === '__proxy_constructor') return this.constructorName; @@ -214,6 +214,10 @@ export class RpcPeer { static readonly finalizerIdSymbol = Symbol('rpcFinalizerId'); + static isRpcProxy(value: any) { + return !!value?.[RpcPeer.PROPERTY_PROXY_ID]; + } + static getDefaultTransportSafeArgumentTypes() { const jsonSerializable = new Set(); jsonSerializable.add(Number.name); @@ -242,6 +246,7 @@ export class RpcPeer { } } + static readonly PROPERTY_PROXY_ID = '__proxy_id'; static readonly PROPERTY_PROXY_ONEWAY_METHODS = '__proxy_oneway_methods'; static readonly PROPERTY_JSON_DISABLE_SERIALIZATION = '__json_disable_serialization'; static readonly PROPERTY_PROXY_PROPERTIES = '__proxy_props';