2.5.2 TSCContextを利用するサーバアプリケーションの例(C++)

TSCContextを利用するサーバアプリケーションの処理の流れとコードの例を示します。斜体で示しているコードは,雛形クラスとして自動生成される部分です。太字で示しているコードは,同期型呼び出しのコードと異なる部分です。

サーバアプリケーションの作成時には,ユーザは,自動生成された雛形クラスABC_TSCimplにTSCユーザオブジェクトのコードを記述します。また,雛形クラスABC_TSCfactimplにTSCユーザオブジェクトファクトリのコードを記述します。

<この項の構成>
(1) TSCユーザオブジェクト(ABC_TSCimpl)とTSCユーザオブジェクトファクトリ(ABC_TSCfactimpl)のヘッダのコード
(2) TSCユーザオブジェクト(ABC_TSCimpl)とTSCユーザオブジェクトファクトリ(ABC_TSCfactimpl)のコード
(3) サービス登録処理の流れ・コード

(1) TSCユーザオブジェクト(ABC_TSCimpl)とTSCユーザオブジェクトファクトリ(ABC_TSCfactimpl)のヘッダのコード

//
// "ABCfile_TSC_t.hh
//
#ifndef _ABCfile_TSC_T_HDR
#define _ABCfile_TSC_T_HDR

#include <tscobject.h>

#include "ABCfile_TSC_s.hh"

class ABC_TSCfactimpl : public TSCObjectFactory
{
public:
 // コンストラクタの引数の数および型を変更することもできます。
 ABC_TSCfactimpl();
 virtual ~ABC_TSCfactimpl();

 virtual TSCObject_ptr create();
 virtual void destroy(TSCObject_ptr tsc_object);

};

class ABC_TSCimpl : public ABC_TSCsk
{
private:

public:
 // コンストラクタの引数の数および型を変更することもできます。
 ABC_TSCimpl();
 ABC_TSCimpl(const char* _tpbroker_object_name);

 virtual ~ABC_TSCimpl();

 void call(const sampleOctetSeq& in_data,
                sampleOctetSeq*& out_data);

};

#endif  // _ABCfile_TSC_T_HDR

(2) TSCユーザオブジェクト(ABC_TSCimpl)とTSCユーザオブジェクトファクトリ(ABC_TSCfactimpl)のコード

//
// "ABCfile_TSC_t.cpp"
//
#include "ABCfile_TSC_t.hh"

#include <tsccontext.h>

ABC_TSCfactimpl::ABC_TSCfactimpl()
{
 // Constructor of factory implementation.
 // Write user own code.
 // TSCユーザオブジェクトファクトリのコンストラクタのコードを記述
 // します。引数の数および型を変更することもできます。

}

ABC_TSCfactimpl::~ABC_TSCfactimpl()
{
   // Destructor of factory implementation.
   // Write user own code.
   // TSCユーザオブジェクトファクトリのデストラクタのコードを記述
   // します。
}

TSCObject_ptr
ABC_TSCfactimpl::create()
{
 // Method to create user object.
 // Write user own code.
 // サーバオブジェクトを生成するコードを記述します。
 // 必要に応じて変更してください。
 return new ABC_TSCimpl();
}

void
ABC_TSCfactimpl::destroy(TSCObject_ptr tsc_obj)
{
 // Method to destroy user object.
 // Write user own code.
 // ここに後処理のコードを記述します。
 // 必要に応じて変更してください。
 delete tsc_obj;
}

ABC_TSCimpl::ABC_TSCimpl()
{
 // Constructor of implementation.
 // Write user own code.
 // TSCユーザオブジェクトのコンストラクタのコードを記述します。
 // 数の数および型を変更することもできます。
}

ABC_TSCimpl::ABC_TSCimpl(const char* _tpbroker_object_name)
      : ABC_TSCsk(_tpbroker_object_name)
{
 // Constructor of implementation.
 // Write user own code.
 // TSCユーザオブジェクトのコンストラクタのコードを記述します。
 // 数の数および型を変更することもできます。
}

ABC_TSCimpl::~ABC_TSCimpl()
{
 // Destructor of implementation.
 // Write user own code.
 // TSCユーザオブジェクトのデストラクタのコードを記述します。
}

void
ABC_TSCimpl::call(const sampleOctetSeq& in_data, sampleOctetSeq*& out_data)
{
 // Operation "::ABC::call".
 // Write user own code.
 // ユーザメソッドのコードを記述します。

 // TSCコンテキストの取得
 TSCContext_ptr ctx = _TSCContext();

 // ユーザデータの取得
 TSCUChar* data = ctx->getUserData();
 TSCInt data_size = ctx->getUserDataLength();
 out_data = new sampleOctetSeq();
 out_data->length(0);
 printf("Call method in ABC_TSCimpl¥n");
}

(3) サービス登録処理の流れ・コード

同期型呼び出しの場合と同様です。「2.2.2(3) サービス登録処理の流れ」,「2.2.2(4) サービス登録処理のコード」を参照してください。