Allow restoring a null objectId by passing None to restore
This commit is contained in:
@@ -25,6 +25,7 @@ cdef extern from "../helpers/capabilityHelper.h":
|
|||||||
VoidPromise convert_to_voidpromise(PyPromise&)
|
VoidPromise convert_to_voidpromise(PyPromise&)
|
||||||
|
|
||||||
cdef extern from "../helpers/rpcHelper.h":
|
cdef extern from "../helpers/rpcHelper.h":
|
||||||
|
Capability.Client restoreHelper(RpcSystem&)
|
||||||
Capability.Client restoreHelper(RpcSystem&, MessageBuilder&)
|
Capability.Client restoreHelper(RpcSystem&, MessageBuilder&)
|
||||||
Capability.Client restoreHelper(RpcSystem&, MessageReader&)
|
Capability.Client restoreHelper(RpcSystem&, MessageReader&)
|
||||||
Capability.Client restoreHelper(RpcSystem&, AnyPointer.Reader&)
|
Capability.Client restoreHelper(RpcSystem&, AnyPointer.Reader&)
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "capnp/dynamic.h"
|
#include "capnp/dynamic.h"
|
||||||
|
#include <capnp/rpc.capnp.h>
|
||||||
#include "capnp/rpc-twoparty.h"
|
#include "capnp/rpc-twoparty.h"
|
||||||
#include "Python.h"
|
#include "Python.h"
|
||||||
#include "capabilityHelper.h"
|
#include "capabilityHelper.h"
|
||||||
@@ -33,29 +34,42 @@ private:
|
|||||||
PyObject * py_restorer;
|
PyObject * py_restorer;
|
||||||
};
|
};
|
||||||
|
|
||||||
capnp::Capability::Client restoreHelper(capnp::RpcSystem<capnp::rpc::twoparty::SturdyRefHostId>& client, capnp::MessageBuilder & objectId) { capnp::MallocMessageBuilder hostIdMessage(8);
|
capnp::Capability::Client restoreHelper(capnp::RpcSystem<capnp::rpc::twoparty::SturdyRefHostId>& client, capnp::MessageBuilder & objectId) {
|
||||||
|
capnp::MallocMessageBuilder hostIdMessage(8);
|
||||||
auto hostId = hostIdMessage.initRoot<capnp::rpc::twoparty::SturdyRefHostId>();
|
auto hostId = hostIdMessage.initRoot<capnp::rpc::twoparty::SturdyRefHostId>();
|
||||||
hostId.setSide(capnp::rpc::twoparty::Side::SERVER);
|
hostId.setSide(capnp::rpc::twoparty::Side::SERVER);
|
||||||
return client.restore(hostId, objectId.getRoot<capnp::AnyPointer>());
|
return client.restore(hostId, objectId.getRoot<capnp::AnyPointer>());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
capnp::Capability::Client restoreHelper(capnp::RpcSystem<capnp::rpc::twoparty::SturdyRefHostId>& client, capnp::MessageReader & objectId) {
|
||||||
capnp::Capability::Client restoreHelper(capnp::RpcSystem<capnp::rpc::twoparty::SturdyRefHostId>& client, capnp::MessageReader & objectId) { capnp::MallocMessageBuilder hostIdMessage(8);
|
capnp::MallocMessageBuilder hostIdMessage(8);
|
||||||
auto hostId = hostIdMessage.initRoot<capnp::rpc::twoparty::SturdyRefHostId>();
|
auto hostId = hostIdMessage.initRoot<capnp::rpc::twoparty::SturdyRefHostId>();
|
||||||
hostId.setSide(capnp::rpc::twoparty::Side::SERVER);
|
hostId.setSide(capnp::rpc::twoparty::Side::SERVER);
|
||||||
return client.restore(hostId, objectId.getRoot<capnp::AnyPointer>());
|
return client.restore(hostId, objectId.getRoot<capnp::AnyPointer>());
|
||||||
}
|
}
|
||||||
capnp::Capability::Client restoreHelper(capnp::RpcSystem<capnp::rpc::twoparty::SturdyRefHostId>& client, capnp::AnyPointer::Reader & objectId) { capnp::MallocMessageBuilder hostIdMessage(8);
|
|
||||||
|
capnp::Capability::Client restoreHelper(capnp::RpcSystem<capnp::rpc::twoparty::SturdyRefHostId>& client, capnp::AnyPointer::Reader & objectId) {
|
||||||
|
capnp::MallocMessageBuilder hostIdMessage(8);
|
||||||
auto hostId = hostIdMessage.initRoot<capnp::rpc::twoparty::SturdyRefHostId>();
|
auto hostId = hostIdMessage.initRoot<capnp::rpc::twoparty::SturdyRefHostId>();
|
||||||
hostId.setSide(capnp::rpc::twoparty::Side::SERVER);
|
hostId.setSide(capnp::rpc::twoparty::Side::SERVER);
|
||||||
return client.restore(hostId, objectId);
|
return client.restore(hostId, objectId);
|
||||||
}
|
}
|
||||||
capnp::Capability::Client restoreHelper(capnp::RpcSystem<capnp::rpc::twoparty::SturdyRefHostId>& client, capnp::AnyPointer::Builder & objectId) { capnp::MallocMessageBuilder hostIdMessage(8);
|
|
||||||
|
capnp::Capability::Client restoreHelper(capnp::RpcSystem<capnp::rpc::twoparty::SturdyRefHostId>& client, capnp::AnyPointer::Builder & objectId) {
|
||||||
|
capnp::MallocMessageBuilder hostIdMessage(8);
|
||||||
auto hostId = hostIdMessage.initRoot<capnp::rpc::twoparty::SturdyRefHostId>();
|
auto hostId = hostIdMessage.initRoot<capnp::rpc::twoparty::SturdyRefHostId>();
|
||||||
hostId.setSide(capnp::rpc::twoparty::Side::SERVER);
|
hostId.setSide(capnp::rpc::twoparty::Side::SERVER);
|
||||||
return client.restore(hostId, objectId);
|
return client.restore(hostId, objectId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
capnp::Capability::Client restoreHelper(capnp::RpcSystem<capnp::rpc::twoparty::SturdyRefHostId>& client) {
|
||||||
|
capnp::MallocMessageBuilder message;
|
||||||
|
capnp::rpc::SturdyRef::Builder ref = message.getRoot<capnp::rpc::SturdyRef>();
|
||||||
|
auto hostId = ref.getHostId().initAs<capnp::rpc::twoparty::SturdyRefHostId>();
|
||||||
|
hostId.setSide(capnp::rpc::twoparty::Side::SERVER);
|
||||||
|
return client.restore(hostId, ref.getObjectId());
|
||||||
|
}
|
||||||
|
|
||||||
template <typename SturdyRefHostId, typename ProvisionId,
|
template <typename SturdyRefHostId, typename ProvisionId,
|
||||||
typename RecipientId, typename ThirdPartyCapId, typename JoinAnswer>
|
typename RecipientId, typename ThirdPartyCapId, typename JoinAnswer>
|
||||||
capnp::RpcSystem<SturdyRefHostId> makeRpcClientWithRestorer(
|
capnp::RpcSystem<SturdyRefHostId> makeRpcClientWithRestorer(
|
||||||
|
|||||||
@@ -1856,7 +1856,9 @@ cdef class TwoPartyClient:
|
|||||||
cdef _DynamicObjectBuilder object_builder
|
cdef _DynamicObjectBuilder object_builder
|
||||||
cdef _DynamicObjectReader object_reader
|
cdef _DynamicObjectReader object_reader
|
||||||
|
|
||||||
if type(objectId) is _DynamicObjectBuilder:
|
if objectId is None:
|
||||||
|
return _CapabilityClient()._init(helpers.restoreHelper(deref(self.thisptr)), self)
|
||||||
|
elif type(objectId) is _DynamicObjectBuilder:
|
||||||
object_builder = objectId
|
object_builder = objectId
|
||||||
return _CapabilityClient()._init(helpers.restoreHelper(deref(self.thisptr), deref(object_builder.thisptr)), self)
|
return _CapabilityClient()._init(helpers.restoreHelper(deref(self.thisptr), deref(object_builder.thisptr)), self)
|
||||||
elif type(objectId) is _DynamicObjectReader:
|
elif type(objectId) is _DynamicObjectReader:
|
||||||
|
|||||||
Reference in New Issue
Block a user