検索
特集

Raspberry PiにAllJoynフレームワーク「Standard Core」を移植する(6/6 ページ)

AllJoynは「家電を中心にさまざまな機器を接続し、情報交換を可能としたフレームワーク」です。さまざまな機器を対象としており、それにはRaspberry Piも含まれます。ルーター機能などを実装可能な「Standard Core」をRaspberry Piに移植します。

Share
Tweet
LINE
Hatena
前のページへ |       

 では、クライアント側にはどのような記述がされているのでしょうか。基本的な流れは前回と大きく変わりませんが、若干異なる部分もあります。

  if (!g_msgBus) {
        status = ER_OUT_OF_MEMORY;
    }
    if (ER_OK == status) {
        status = CreateInterface();
    }
    if (ER_OK == status) {
        status = StartMessageBus();
    }
    if (ER_OK == status) {
        status = ConnectToBus();
    }
    if (ER_OK == status) {
        RegisterBusListener();
        status = FindAdvertisedName();  /サーバがバス上に公開した名称を探すサブルーティン/
    }
    if (ER_OK == status) {
        status = WaitForJoinSessionCompletion();
    }
    if (ER_OK == status) {
        status = MakeMethodCall();  /サーバに文字列をメッセージとして渡すサブルーティン/
    }
 
    /* Deallocate bus */
    delete g_msgBus;
    g_msgBus = NULL;
 
    printf("Basic client exiting with status 0x%04x (%s).\n", status, QCC_StatusText(status));

 文字列をメッセージとして渡すサブルーティンも見てみましょう。

QStatus MakeMethodCall(void)
{
    ProxyBusObject remoteObj(*g_msgBus, SERVICE_NAME, SERVICE_PATH, s_sessionId);
    const InterfaceDescription* alljoynTestIntf = g_msgBus->GetInterface(INTERFACE_NAME);
 
    assert(alljoynTestIntf);
    remoteObj.AddInterface(*alljoynTestIntf);
 
    Message reply(*g_msgBus);
    MsgArg inputs[2];
 
    inputs[0].Set("s", "Hello "); 文字列1を設定
    inputs[1].Set("s", "World!"); 文字列2を設定
 
    QStatus status = remoteObj.MethodCall(INTERFACE_NAME, "cat", inputs, 2, reply, 5000);  /サーバを呼び出します/
 
    if (ER_OK == status) {
        printf("'%s.%s' (path='%s') returned '%s'.\n", SERVICE_NAME, "cat",
               SERVICE_PATH, reply->GetArg(0)->v_string.str);
    } else {
        printf("MethodCall on '%s.%s' failed.", SERVICE_NAME, "cat");
    }
 
    return status;
}

 サーバ側の呼ばれる関数とクライアント側の呼び出す関数を見ると、次のことが分かります。

サーバ/クライアント 関数
Server側 void Cat(const InterfaceDescription::Member* member, Message& msg)
Client側 QStatus status = remoteObj.MethodCall(INTERFACE_NAME, "cat", inputs, 2, reply, 5000)

 バスを通した関数呼び出しの形になっていることが分かります。複雑な前処理がありますが、基本部分はこの考え方に沿って進みます。APIの詳しい説明は、以下のURLにあります。また、今回のサンプル以外にも、同じディレクトリに幾つかのサンプルプログラムがあるので参照してください。

・Running Sample Applications(サンプルプログラムの解説とビルド)

・API Guide(API関係のポインタ)

・AllJoyn Java API Reference Manual

・AllJoyn C API Reference Manual

・AllJoyn C++ API Reference Manual

・AllJoyn API(Windows 10)

関連キーワード

AllJoyn | Raspberry Pi | AllSeen Alliance | Raspberry Pi 2


Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る