Hi all,
I am a newbie to CapnProto. I'd like to have your help.
I want to request a function of server2 in the callback of server1.
But I got an exception like below.
Please help me resolve it.
Many thanks!
* thread #1, queue = 'com.apple.main-thread', stop reason =
EXC_BAD_ACCESS (code=1, address=0x3000000000020)
* frame #0: 0x000000010035859c
libcapnp-rpc-0.10.2.dylib`capnp::VatNetwork<capnp::rpc::twoparty::VatId,
capnp::rpc::twoparty::ProvisionId, capnp::rpc::twoparty::RecipientId,
capnp::rpc::twoparty::ThirdPartyCapId,
capnp::rpc::twoparty::JoinResult>::baseConnect(capnp::AnyStruct::Reader)
+ 20
frame #1: 0x0000000100361a2c
libcapnp-rpc-0.10.2.dylib`kj::_::TransformPromiseNode<kj::_::Void,
kj::Own<kj::AsyncIoStream>,
capnp::EzRpcClient::Impl::Impl(kj::StringPtr, unsigned int,
capnp::ReaderOptions)::'lambda'(kj::Own<kj::AsyncIoStream>&&),
kj::_::PropagateException>::getImpl(kj::_::ExceptionOrValue&) + 512
frame #2: 0x00000001004d2220
libkj-async-0.10.2.dylib`kj::_::RunnableImpl<kj::_::TransformPromiseNodeBase::get(kj::_::ExceptionOrValue&)::$_31>::run()
+ 32
frame #3: 0x000000010028aaa4
libkj-0.10.2.dylib`kj::_::runCatchingExceptions(kj::_::Runnable&) + 40
frame #4: 0x00000001004c7e48
libkj-async-0.10.2.dylib`kj::_::TransformPromiseNodeBase::get(kj::_::ExceptionOrValue&)
+ 64
frame #5: 0x00000001004c8684
libkj-async-0.10.2.dylib`kj::_::ForkHubBase::fire() + 60
frame #6: 0x00000001004c654c
libkj-async-0.10.2.dylib`kj::_::waitImpl(kj::Own<kj::_::PromiseNode>&&,
kj::_::ExceptionOrValue&, kj::WaitScope&, kj::SourceLocation) + 608
frame #7: 0x0000000100005198
client`kj::Promise<capnp::Response<SampleServer1::CallbackRegisterResults>
>::wait(kj::WaitScope&, kj::SourceLocation) + 120
frame #8: 0x0000000100004b94 client`main + 344
frame #9: 0x000000010003d08c dyld`start + 520
*Sample source code as below*
*SampleServer1.capnp:*
interface SampleServer1 {
callbackRegister @0 (callback :Callback) -> (); //to register a callback
interface Callback {
calbackFunc @0 (in :Int32) -> ();
}
}
*SampleServer1::Server Impl:*
class SampleServer1Impl : public SampleServer1::Server
{
::kj::Promise<void> callbackRegister(CallbackRegisterContext context){
auto cb = context.getParams().getCallback());
auto request = cb.calbackFuncRequest(); //Call callback function
request.setIn(111);
auto promise = request.send();
return kj::READY_NOW;
}
}
*SampleServer1::Callback::Server Impl:*
class CallbackImpl : public SampleServer1::Callback::Server
{
::kj::Promise<void> calbackFunc(CalbackFuncContext context){
capnp::EzRpcClient ezClient2("unix:/tmp/capnp-server-2");
Server2::Client client2 = ezClient2.getMain<SampleServer2>();
auto& waitScope = ezClient2.getWaitScope();
{
auto request = client2.functionSampleRequest(); //Request to SERVER2
request.setIn(222);
auto promise = request.send();
promise.wait(waitScope);
}
return kj::READY_NOW;
}
}
*SampleServer2.capnp:*
interface SampleServer2 {
functionSample @0 (in :Int32) -> ();
}
*SampleServer2::Server impl*
class SampleServer2 Impl : public SampleServer2::Server
{
::kj::Promise<void> functionSample(FunctionSampleContext context){
//Do something
return kj::READY_NOW;
}
}
*Client implement*
capnp::EzRpcClient ezClient("unix:/tmp/capnp-server-1");
Subscriber::Client client = ezClient.getMain<SampleServer1>();
auto& waitScope = ezClient.getWaitScope();
::SampleServer1::Callback::Client callback =
::SampleServer1::Callback::Client(kj::heap<CallbackImpl>());
auto request = client.callbackRegisterRequest(); //Register a
callback to Server1
request.setCallback(callback);
auto promise = request.send();
--
You received this message because you are subscribed to the Google Groups
"Cap'n Proto" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/capnproto/CAJ0niqqYEedcQ1aCaHMv%2Bdw9%3Dzdb1RYKa1y2oQCtbBSTKLqN2g%40mail.gmail.com.