// 04WebServer2.cpp : アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"
#include "04WebServer2.h"
#include "DebugDialog.h"
#include "BadAllocException.h"
#include "InitWinsock.h"
#include <new.h>


/*!
	プロセスエントリ
*/
int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
	//	コール
	C04WebServerApp	app;
	app.ServerMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow);

	return FALSE;
}

/////////////////////////////////////////////////////////////////////////////
//	実行
/////////////////////////////////////////////////////////////////////////////
/*!
	メイン
*/
void C04WebServerApp::ServerMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
	//	変数コピー
	m_hInstance = hInstance;
	m_commandLine = lpCmdLine;

	//	初期化
	if(InitServer())
		return;

	//	コマンドライン掃除
	CUTF8String	commandLine(m_commandLine);
	commandLine.Trim();

	//	モードにより分岐
	if(commandLine.CompareNoCase(_U8("/Debug")) == 0)
		DebugRun();
	else if(commandLine.CompareNoCase(_U8("/Service")) == 0)
		ServiceRun();
	else
		AppRun();
}

/////////////////////////////////////////////////////////////////////////////
//	初期化など
/////////////////////////////////////////////////////////////////////////////
/*!
	全体の初期化
*/
int C04WebServerApp::InitServer()
{
	//	newエラーハンドラをセット
	_set_new_handler(BadAllocHandler);

	//	文字列のメモリプールを有効に
	CUTF8String::EnableMemoryPool();

	//	ソケット有効化
	InitWinSock();


	return(0);
}



/////////////////////////////////////////////////////////////////////////////
//	処理
/////////////////////////////////////////////////////////////////////////////
/*!
	デバッグ起動
*/
void C04WebServerApp::DebugRun()
{
	//	ダイアログ表示
	CDebugDialog	dialog;
	dialog.DoDebug(m_hInstance, GetServerControl());
}

/*!
	アプリ起動
*/
void C04WebServerApp::AppRun()
{
}

/*!
	サービス起動
*/
void C04WebServerApp::ServiceRun()
{
}


/////////////////////////////////////////////////////////////////////////////
//	補助
/////////////////////////////////////////////////////////////////////////////
/*!
	メモリ例外ハンドラ
*/
int C04WebServerApp::BadAllocHandler(size_t size)
{
	//	例外を投げる
	throw CBadAllocException(size);
}
