TSCWatchTimeを利用するサーバアプリケーションの処理の流れとコードの例を示します。斜体で示しているコードは,雛形クラスとして自動生成される部分です。太字で示しているコードは,同期型呼び出しのコードと異なる部分です。
サーバアプリケーションの作成時には,ユーザは,自動生成された雛形クラスABC_TSCimplにTSCユーザオブジェクトのコードを記述します。また,雛形クラスABC_TSCfactimplにTSCユーザオブジェクトファクトリのコードを記述します。さらに,TSCThreadの派生クラスとTSCThreadFactoryの派生クラスを記述します。
//
// "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();
virtual ~ABC_TSCimpl();
void call(const OctetSeq& in_data,OctetSeq*& out_data);
// メソッドが呼ばれた回数
CORBA::Long m_counter;
};
#endif // _ABCfile_TSC_T_HDR
//
// "ABCfile_TSC_t.cpp"
//
#include <tscadm.h>
#include <tscexcept.h>
#include "ABCfile_TSC_t.hh"
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.
////////
// 時間監視の処理
////////
TSCWatchTime_ptr watch_time = 0;
try
{
// 監視時間60秒の時間監視オブジェクト生成
watch_time = new TSCWatchTime(60);
// 時間監視の開始
watch_time->start();
// TSCユーザオブジェクトのコンストラクタのコードを記述します。
// 引数の数および型を変更することもできます。
// 時間監視の中断
watch_time->stop();
// 時間監視オブジェクトの解放
delete watch_time;
}
catch(TSCSystemException& se)
{
// 例外処理
fprintf(stderr,"EC=%d,DC=%d,PC=%d,MC1=%d,MC2=%d¥n",
se.getErrorCode(), se.getDetailCode(),
se.getPlaceCode(), se.getMaintenanceCode1(),
se.getMaintenanceCode2());
delete watch_time;
throw;
}
}
ABC_TSCimpl::~ABC_TSCimpl()
{
// Destructor of implementation.
// Write user own code.
// ユーザオブジェクトのデストラクタのコードを記述します。
}
void ABC_TSCimpl::call(const OctetSeq& in_data,
OctetSeq*& out_data)
{
// Operation "::ABC::ABCCall".
// Write user own code.
// ユーザメソッドのコードを記述します。
// メソッドが呼ばれた回数を増加させます。
// (このメソッドの処理は引数の値と無関係です)
m_counter++;
out_data = new OctetSeq();
out_data->length(0);
}
同期型呼び出しの場合と同様です。「2.2.2(3) サービス登録処理の流れ」,「2.2.2(4) サービス登録処理のコード」を参照してください。