/*****************************************************************************
*
* FILE NAME:    SampleAPP.cpp
*
* DESCRIPTION:  SampleAPP アプリケーションクラスのインプリメンテーション
*
\*****************************************************************************/

#include <iostream>
#include "SampleAPP.h"

///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
// CISampleAPPApp クラス


///////////////////////////////////////////////////////////////////////
// アプリケーションクラスのインスタンス宣言

CISampleAPPApp   theApp("SampleAPP");
//{{MBXSEMS : globals
//}}

///////////////////////////////////////////////////////////////////////
// オーバーライド InitInstance

BOOL CISampleAPPApp::  InitInstance(void)
{
	// 基本クラスの初期化
	CIApp::InitInstance();

	SetLogLevel(LOG_DEBUG);
	PrintLog(LOG_DEBUG, "debug  : LogLevel = %d \n", GetLogLevel());

#ifdef _DEBUG
	_STD cout << "Entering CISampleAPPApp::InitInstance argc="
		<< m_iArg << _STD endl;
	for (int i=0; i<m_iArg; i++)
		_STD cout << "Argv[" << i << "] = " << m_pArg[i] << _STD endl;
#endif

	// プロセスの最大プライオリティを調整します（失敗は無視します）
	::SetRtProcessMaxPriority(NULL_RTHANDLE, 150);

	// 共有メモリの生成(以下のタグは編集しないでください)
	//{{MEMS : create shared memory
	//}}

	// メールボックス・セマフォスレッドの生成(以下のタグは編集しないでください)
	//{{MBXSEMS : create mailbox and semaphore threads
	//}}

	// 割り込み処理オブジェクトの生成(以下のタグは編集しないでください)
	//{{INTERRUPTS : create interrupt handling objects
	//}}

	// ポーリングスレッドの生成(以下のタグは編集しないでください)
	//{{POLLS : create polling threads
	//}}

	// クライアントスレッドの生成(以下のタグは編集しないでください)
	//{{CLIENTS : create client threads

	CREATE_CLIENT(ClientThread1, 180, 4096)

	//}}

	return TRUE;
}


///////////////////////////////////////////////////////////////////////
// オーバーライド OnNotify

BOOL CISampleAPPApp::OnNotify(LPEVENTINFO pEI)
{
	// イベントを処理します
	// FALSEを返却するとアプリケーションを終了します

	switch(pEI->dwNotifyType)
	{
	case TERMINATE:
	// TODO: このプロセスを終了するときの処理
	// 環境をクリーンアップします
		return FALSE;

	case RT_CLIENT_DOWN:
	// TODO: NTホストにおいてRTクライアントのダウンに反応したときの処理
		return TRUE;

	case RT_CLIENT_UP:
	// TODO: NTホストにおいてRTクライアントの復帰に反応したときの処理
		return TRUE;

	case NT_HOST_DOWN:
	// TODO: RTクライアントにおいてNTホストのダウンに反応したときの処理
		return TRUE;

	case NT_HOST_UP:
	// TODO: RTクライアントにおいてNTホストの復帰に反応したときの処理
		return TRUE;

	case NT_BLUESCREEN:
	// TODO: NTのブルースクリーンを検出したときの処理
		return TRUE;

	default:
		Fail("Unknown notification");
		return FALSE; // 通常はありえません
	}

	// コンパイラ処理のため要
	return FALSE;
}


///////////////////////////////////////////////////////////////////////
// オーバーライド ExitInstance

int CISampleAPPApp::ExitInstance(void)
{
#ifdef _DEBUG
	_STD cout << "Leaving CISampleAPPApp" << _STD endl;
#endif

	// 基本クラスで実行することを記述します
	return CIApp::ExitInstance();
}
