1
我想嘗試使用Cap'n Proto C++ RPC來承諾流水線,但我不知道該怎麼做。Cap'n Proto和承諾流水線
這裏是我的架構:
interface Test {
getInt @0() -> (intResult :Int32);
increment @1 (intParam :Int32) -> (intResult :Int32);
}
這裏是我想要做的(僞代碼)是什麼:
increment(getInt());
我試圖做這樣的事情:
auto request1 = test.getIntRequest();
auto promise = request1.send();
auto request2 = test.incrementRequest();
request2.setIntParam(promise.getIntResult()) // HERE IS THE PROBLEM
auto promise2 = request2.send();
但它不是使用承諾的好方法。 我希望你明白我想要做什麼。
謝謝。
編輯:另一個問題:如何實現服務器上的方法?
我寫了這個代碼:
#include <kj/debug.h>
#include <capnp/ez-rpc.h>
#include <capnp/message.h>
#include <iostream>
#include "test.capnp.h"
using namespace std;
class TestI : virtual public Test::Server
{
public:
TestI() {}
::kj::Promise<void> getInt(GetIntContext context)
{
// ????
}
::kj::Promise<void> increment(IncrementContext context)
{
// ????
}
};
class Int32BoxI : virtual public Int32Box::Server
{
private:
int val = 12;
public:
Int32BoxI(int value): val(value) {}
::kj::Promise<void> get(GetContext context)
{
context.getResults().setValue(this->val);
return kj::READY_NOW;
}
}
,但我不知道如何實現getInt()和增量()。
謝謝你的回答。現在對我來說更清楚了。但是,我在服務器上實現這些方法有一些困難。我編輯了我的第一篇文章,向您展示我的問題。再次感謝你。 –
@ B.Clement我建議查看Cap'n Proto存儲庫中的「計算器」示例 - 它與您正在做的非常相似。請參閱:https://github.com/sandstorm-io/capnproto/tree/master/c++/samples –