// 04WebServer.h : PROJECT_NAME アプリケーションのメイン ヘッダー ファイルです。
//

#pragma once

#ifndef __AFXWIN_H__
	#error include 'stdafx.h' before including this file for PCH
#endif

#include "resource.h"		// メイン シンボル
#include "Server.h"
#include "systemservice.h"
#include "PathTools.h"
#include "ServerControlPipeServer.h"
#include "ApplicationModeMsgWnd.h"
#include "SecDesc.h"


// CMy04WebServerApp:
// このクラスの実装については、04WebServer.cpp を参照してください。
//

class CMy04WebServerApp : public CWinApp
{
protected:
	CCriticalSection	m_scopeLock;

public:
	CMy04WebServerApp();

// オーバーライド
public:
	virtual BOOL InitInstance();

// 実装
protected:
	int DoRegister(CString command);
	CString GetCommandOption();
	void SetServerSecurityDescripter();

public:
	//////////////////////////////////////////////////////////////////////////////////
	//	サーバコントロール
	//////////////////////////////////////////////////////////////////////////////////
	int StartServer();
	int StopServer();
	CString GetServerErrorInfo();
	int ServerRunning();
	int GetConnectCount();
	int IsService();
	CString GetServerRoot() { return CPathTools::GetAppPath(); };

	//!	サーバ情報取得
	int GetServerInfo(CWorkspaceAccess info);

	//!	サーバ設定取得
	int GetServerSetting(CWorkspaceAccess setting);

	//!	接続情報取得
	int GetServerContext(CWorkspaceAccess context);

	//////////////////////////////////////////////////////////////////////////////////
	//	サーバ情報
	//////////////////////////////////////////////////////////////////////////////////
	CString GetServerInfoXML();
	CString GetServerSettingXML();
	CString GetServerContextXML();

	CString GetAppPath(int directoryPath=TRUE);
	void SetServerStatus(CString stat);

	void WriteDebugLog(LPCTSTR lpszFormat, ...);
	void KillAllController();

	//!	内部情報をダンプ
	void DumpContext();

	//!	システムサービスコンテキスト取得
	CSystemService *GetSystemService() { return &m_serviceContext; };

	//!	サービス登録
	void RegisterService(int reg);

	//!	接続中のコントローラ数
	int GetConnectedControllerCount() { return m_pipeServer.GetConnectionCount(); };

	DECLARE_MESSAGE_MAP()
	virtual int ExitInstance();
	
protected:
	//////////////////////////////////////////////////////////////////////////////////
	//	メンバ変数
	//////////////////////////////////////////////////////////////////////////////////
	//!	サーバ本体
	CServer			*m_server;

	//!	システムサービス制御
	CSystemService	m_serviceContext;

	//!	サービスモードかアプリモードか？
	int				m_serviceMode;

	//!	サーバ状態
	CString			m_serverStatus;

	//!	終了コード
	int				m_exitCode;

	//!	コントローラ通信用パイプサーバ
	CServerControlPipeServer	m_pipeServer;

	//!	アプリケーションモード用
	CApplicationModeMsgWnd		m_msgWindow;
};

extern CMy04WebServerApp theApp;
