三次元日誌(hugo)

C++でMessagePack-RPCを実装する

cpp msgpack

最近のC++(-std=c++14)でMessagePack-RPCを再実装してみる。

Header-OnlyのMessagePack実装とmsgpack-rpc-asioの更新

cpp msgpack asio

車輪の再発明的だけどmessagepackのc++実装をまた作った。

IrrlichtにMsgPackRPCを仕込む

irrlicht msgpack
IrrlichtにMsgPackRPCを仕込む Oculusの通販ステータスが早くもProcessingに変わって届くのが楽しみな今日この頃。

おれおれmsgpack-rpc-pythonを作る

python msgpack
おれおれmsgpack-rpc-pythonを作る MsgPackRPCのpythonバインディング(クライアント側)が必要になったのでmsg

msgpack-rpc-asioの関数登録と実行

cpp msgpack asio

msgpack-rpcのリクエストは、

[type, msgid, method, params]

という形式なのでmethod名をstd::stringとしてparamsをstd::tupleとして得られる。 これをサーバ側で如何に呼び出すかについて。

可変長テンプレート引数

cpp msgpack asio

引き続きmsgpack-rpc-asioを実装しているのだが、可変長テンプレート引数(valiadic template)を使うと関数登録のような場合にうまく書けることがわかった。

lambdaの引数の型を得たい

cpp msgpack asio

msgpack-rpcの関数登録の都合上、lambda関数から引数の型を得たい。 下記のような書き方をしたい。

template<typename R, typename A1, typename A2>
void register_func(const std::stiring &func_name
    , R(*handler)(A1, A2)) 
{
    // 関数登録 
}

int main() { 
    // errorになる 
    register_func("add", [](int a, int b)->int{ return a+b; });

    return 0;
} 

msgpack-rpcのasio版を作成中

cpp msgpack asio

連休から始めていたmsgpack-rpcのバックエンドをasioに置き換えてWindowsでも動くようにする試みがやっと目処が立った。