Build TOP Environments

開発者向け

C言語インタフェース

デバッグ関連(C I/F)
DSOロード関連(C I/F)
Create/Destroy関連(C I/F)
サーバノード送受信関連(C I/F)
スレーブノード送受信関連(C I/F)
サーバノード・スレーブノード返信関連(C I/F)
ユーティリティ関連(C I/F)
自動マージコールバック関数(C I/F)

C++言語インタフェース

デバッグ関連(C/C++ I/F)
ChmCntrlクラス
chmstream(ichmstream、ochmstream)クラス


C言語インタフェース

CHMPXと接続するサーバー/クライアントプログラムは、CHMPXライブラリを利用する必要があります。

開発時には以下のヘッダファイルをインクルードしてください。

#include <chmpx/chmpx.h>

リンク時には以下をオプションとして指定してください。

-lchmpx

デバッグ関連(C I/F)

書式

説明

パラメータ

返り値

chmpx_set_debug_file、chmpx_unset_debug_file、chmpx_load_debug_env は成功した場合には、true を返します。失敗した場合には false を返します。

注意

環境変数 CHMDBGMODE、CHMDBGFILE については、CHMPX 詳細部分を参照してください。


DSOロード関連(C I/F)

書式

説明

返り値

成功した場合には、true を返します。失敗した場合には false を返します。

注意

HASH関数のDSOは、K2HASHの機能になります。本関数群はK2HASHの関数をラップしたものになります。詳細は、K2HASHのDSOロード関連を参照してください。

サンプル

if(!chmpx_load_hash_library("/usr/lib64/myhashfunc.so")){
    return false;
}
    //...
    //...
    //...
chmpx_unload_hash_library();

Create/Destroy関連(C I/F)

書式

説明

パラメータ

返り値

注意

生成したCHMPXオブジェクトハンドル、受け取った通信情報ハンドルは必ず破棄してください。

サンプル

chmpx_h    handle;
if(CHM_INVALID_HANDLE == (handle = chmpx_create("myconffile", false, true))){
    return false;
}
    //...
    //...
    //...
if(!chmpx_destroy(handle)){
    return false;
}

サーバノード送受信関連(C I/F)

書式

説明

パラメータ

返り値

成功した場合には、true を返します。失敗した場合には false を返します。

注意

サーバノードから通常は送信を開始することはありません(非同期通信を行う場合には利用することはあります)。 通常、サーバノードでは受信処理を行い、その受信した際の「通信情報ハンドル」を使い、クライアントプロセスへ返信をすることになります。(後章参照)

サンプル

chmpx_h    handle;
if(CHM_INVALID_HANDLE == (handle = chmpx_create("myconffile", true, true))){
    return false;
}
chmpx_pkt_h    pckthandle;
unsigned char*    pbody;
size_t        length;
if(!chmpx_svr_receive(handle, &pckthandle, &pbody, &length, 100, true)){
    chmpx_destroy(handle);
    return false;
}
    //...
    //...
    //...
    //...
chmpx_pkth_destroy(pckthandle);
if(!chmpx_destroy(handle)){
    return false;
}

スレーブノード送受信関連(C I/F)

書式

説明

パラメーター

返り値

成功した場合には、true を返します。失敗した場合には false を返します。

注意

スレーブノードは、通常は受信シーケンスから開始することはありません(非同期通信を行う場合には利用することはあります)。 通常、スレーブノードでは送信処理を行い、その送信したメッセージハンドルに対して、返信を待つことになります。

サンプル

chmpx_h    handle;
if(CHM_INVALID_HANDLE == (handle = chmpx_create("myconffile", false, true))){
    return false;
}
msgid_t    msgid;
if(CHM_INVALID_MSGID == (msgid = chmpx_open(handle, true))){
    chmpx_destroy(handle);
    return false;
}
unsigned char    body[]    = ....;
size_t        blength    = sizeof(body);
chmhash_t    hash    = 0x.....;
long        receivercnt;
if(!chmpx_msg_send(handle, msgid, body, blength, hash, &receivercnt, true)){
    chmpx_close(handle, msgid);
    chmpx_destroy(handle);
    return false;
}
chmpx_pkt_h    pckthandle;
unsigned char*    pbody;
size_t        length;
if(!chmpx_msg_receive(handle, msgid, &pckthandle, &pbody, &length, 100)){
    chmpx_close(handle, msgid);
    chmpx_destroy(handle);
    return false;
}
    //...
    //...
    //...
    //...
chmpx_pkth_destroy(pckthandle);
if(!chmpx_close(handle, msgid)){
    chmpx_destroy(handle);
    return false;
}
if(!chmpx_destroy(handle)){
    return false;
}

サーバノード・スレーブノード返信関連(C I/F)

書式

説明

パラメータ

返り値

成功した場合には、true を返します。失敗した場合には false を返します。

注意

スレーブノードは、通常は返信を行いません(非同期通信を行う場合には利用することがあります)。 よって、本関数群は主にサーバノードで利用されます。

サンプル

chmpx_h    handle;
if(CHM_INVALID_HANDLE == (handle = chmpx_create("myconffile", true, true))){
    return false;
}
chmpx_pkt_h    pckthandle;
unsigned char*    pbody;
size_t        length;
if(!chmpx_svr_receive(handle, &pckthandle, &pbody, &length, 100, true)){
    chmpx_destroy(handle);
    return false;
}
    //...
    //...
    //...
    //...
unsigned char    body[] = ....;
size_t        blength = sizeof(body);
if(!chmpx_msg_reply(handle, pckthandle, body, blength)){
    chmpx_pkth_destroy(pckthandle);
    chmpx_destroy(handle);
    return false;
}
if(!chmpx_pkth_destroy(pckthandle)){
    chmpx_destroy(handle);
    return false;
}
if(!chmpx_destroy(handle)){
    return false;
}

ユーティリティ関連(C I/F)

書式

説明

パラメータ

返り値

注意

特になし。


自動マージコールバック関数(C I/F)

自動マージ(オートマージ)機能を利用する場合に、サーバーノード上のクライアントが設定することができるコールバック関数です。下記の関数型で定義された関数をchmpx_create_ex関数、InitializeOnServerメソッドに指定します。 これらの関数が指定されていない場合にはコールバックによる処理はされず、自動マージはchmpxで処理されたものとして動作をします。

書式

説明

パラメータ

構造体

chm_merge_get_cbで引き渡されるパラメータCHM_MERGE_GETPARAMです。

typedef struct chm_merge_getparam{
    chmhash_t           starthash;
    struct timespec     startts;                // start time for update datas
    struct timespec     endts;                  // end time for update datas
    chmhash_t           target_hash;            // target hash value(0 ... target_max_hash)
    chmhash_t           target_max_hash;        // max target hash value
    long                target_hash_range;      // range for hash value
}CHM_MERGE_GETPARAM, *PCHM_MERGE_GETPARAM;

以下は、メンバーの説明および定義です。

返り値

正常に処理が完了した場合には、true を返してください。処理に失敗した場合には false を返してください。(falseの場合にはマージ処理が中断します。)

注意

特になし。


C++言語インタフェース

CHMPXと接続するサーバー/クライアントプログラムは、CHMPXライブラリを利用する必要があります。
開発時には以下のヘッダファイルおよびその他適切なヘッダファイルをインクルードしてください。

#include <chmpx/chmcntrl.h>
#include <chmpx/chmpx.h>

リンク時には以下をオプションとして指定してください。

-lchmpx

以下にC++言語用の関数の説明をします。


デバッグ関連(C/C++ I/F)

書式

説明

パラメータ

返り値

注意

環境変数 CHMDBGMODE、CHMDBGFILE については、CHMPX 詳細部分を参照してください。


ChmCntrlクラス

説明

CHMPXオブジェクトのクラスです。 このクラスを通じて、CHMPXとのデータ送受信を行います。 基本的なサーバノードのプログラミングは、本クラスのインスタンスを生成してデータの送受信を行います。 スレーブノードの場合は、本クラスのインスタンスを生成してメッセージハンドルをオープンし、データの送受信を行います。 操作が完了したら、メッセージハンドルのクローズを行い、本オブジェクトを破棄します。

メソッド

メソッド説明

メソッド返り値

bool値の返り値のプロトタイプは、成功した場合には、true を返します。失敗した場合には false を返します。
ChmCntrl::Openメソッドは、オープンしたメッセージハンドルを返します。

サンプル(サーバノード)

ChmCntrl*    pchmpx = new ChmCntrl();
if(!pchmpx->InitializeOnServer("myconffile", true)){
    CHM_Delete(pchmpx);
    return false;
}
PCOMPKT        pComPkt;
unsigned char*    pbody;
size_t        length;
if(!pchmpx->Receive(&pComPkt, &pbody, &length, 0, true)){
    CHM_Delete(pchmpx);
    return false;
}
    //...
    //...
    //...
unsigned char    body[] = ....;
size_t        blength = sizeof(body);
if(!pchmpx->Reply(pComPkt, body, blength)){
    CHM_Free(pComPkt);
    CHM_Delete(pchmpx);
    return false;
}
CHM_Free(pComPkt);
CHM_Delete(pchmpx);

サンプル(スレーブノード)

ChmCntrl*    pchmpx = new ChmCntrl();
if(!pchmpx->InitializeOnSlave("myconffile", true)){
    CHM_Delete(pchmpx);
    return false;
}
msgid_t    msgid;
if(CHM_INVALID_MSGID == (msgid = pchmpx->Open(true))){
    CHM_Delete(pchmpx);
    return false;
}
unsigned char    body[] = ....;
size_t        blength = sizeof(body);
chmhash_t    hash = 0x....;
long        receivercnt;
if(!pchmpx->Send(msgid, body, blength, hash, &receivercnt, true)){
    pchmpx->Close(msgid);
    CHM_Delete(pchmpx);
    return false;
}
    //...
    //...
    //...
PCOMPKT        pComPkt;
unsigned char*    pbody;
size_t        length;
if(!pchmpx->Receive(&pComPkt, &pbody, &length, 0){
    pchmpx->Close(msgid);
    CHM_Delete(pchmpx);
    return false;
}
CHM_Free(pComPkt);
pchmpx->Close(msgid);
CHM_Delete(pchmpx);

ステータス(状態)取得

ChmCntrl    chmobj;
if(!chmobj.OnlyAttachInitialize(conffile.c_str(), ctlport)){
    return false;
}
if(!is_self){
    PCHMINFOEX    pInfo = pchmobj->DupAllChmInfo();
        ・
        ・
        ・
    ChmCntrl::FreeDupAllChmInfo(pInfo);
}else{
    PCHMPX    pInfo = pchmobj->DupSelfChmpxInfo();
        ・
        ・
        ・
    ChmCntrl::FreeDupSelfChmpxInfo(pInfo);
}
chmobj.Clean();

chmstream(ichmstream、ochmstream)クラス

説明

CHMPXオブジェクトへの直接的なアクセス(送信、受信)を提供するiostream派生クラスです。 ChmCntrlクラスを指定して、ストリームクラスである chmstream、ichmstream、ochmstream を初期化し、iostreamとして利用できるクラスです。 通常のstd::stringstreamと同等であり、またseekposを利用できます。 詳細な説明は、std::stringstream などを参考にしてください。

基本クラス

chmstream std::basic_stream
ichmstreamstd::basic_istream
ochmstreamstd::basic_ostream
#### サンプル ``` ChmCntrl* pchmpx = new ChmCntrl(); ・ ・ ・ // server node stream test { chmstream strm(&chmobj); string strKey; string strVal; strm >> strKey; strm >> strVal; cout << "Key: " << strKey << " Value: " << strVal << endl; strm.clear(); strm << strKey << endl; strm << strVal << endl; } // slave node stream test { chmstream strm(&chmobj); string strKey = "...."; string strVal = "...."; strm << strKey << endl; strm << strVal << endl; strm.clear(); strm >> strKey; strm >> strVal; cout << "Key: " << strKey << " Value: " << strVal << endl; } ```
Build TOP Environments