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 capnproto+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/capnproto/CAJ0niqqYEedcQ1aCaHMv%2Bdw9%3Dzdb1RYKa1y2oQCtbBSTKLqN2g%40mail.gmail.com.