#pragma once
#include "PipeServer.h"
#include "CommandPacket.h"


/*!
	制御用パイプサーバ提供クラス
	このクラスがパイプサーバ系の最も上位
	サーバアプリ実行中は、HTTPサーバの稼働に関わらず常時動作する
*/
class CServerControlPipeServer : protected CPipeCommandExecuteBase
{
protected:
	CCriticalSection			m_scopeLock;

public:
	CServerControlPipeServer(void);
	virtual ~CServerControlPipeServer(void);

	//////////////////////////////////////////////////////////////////////////////////
	//	コントロール
	//////////////////////////////////////////////////////////////////////////////////
	//!	開始
	int Start();

	//!	停止
	void Stop();

	//!	現在パイプが存在するかチェック
	static int CheckOther();

	//!	接続数を取得
	int GetConnectionCount() { return m_pipeServer.GetConnectionCount(); };

protected:
	//////////////////////////////////////////////////////////////////////////////////
	//	CPipeCommandExecuteBase
	//////////////////////////////////////////////////////////////////////////////////
	//!	クライアントからのコマンドを実行
	virtual int OnRecvCommand(CBuffer &recvData, CBuffer &sendData);

	//////////////////////////////////////////////////////////////////////////////////
	//	コマンド実行
	//////////////////////////////////////////////////////////////////////////////////
	//!	サーバ起動・再起動
	int DoStartServer(CCommandPacket &recvData, CCommandPacket &sendData);

	//!	サーバ停止
	int DoStopServer(CCommandPacket &recvData, CCommandPacket &sendData);

	//!	サーバエラー情報取得
	int DoGetServerErrorString(CCommandPacket &recvData, CCommandPacket &sendData);

	//!	サーバルート取得
	int DoGetServerRoot(CCommandPacket &recvData, CCommandPacket &sendData);

	//!	接続数取得
	int DoGetConnectCount(CCommandPacket &recvData, CCommandPacket &sendData);

	//!	実行状態取得
	int DoIsRunning(CCommandPacket &recvData, CCommandPacket &sendData);

	//!	起動モード取得
	int DoIsService(CCommandPacket &recvData, CCommandPacket &sendData);

	//!	サーバ情報取得
	int DoGetServerInfo(CCommandPacket &recvData, CCommandPacket &sendData);

	//!	サーバ設定取得
	int DoGetServerSetting(CCommandPacket &recvData, CCommandPacket &sendData);

	//!	接続情報取得
	int DoGetServerContext(CCommandPacket &recvData, CCommandPacket &sendData);


	//////////////////////////////////////////////////////////////////////////////////
	//	メンバ変数
	//////////////////////////////////////////////////////////////////////////////////
	//!	パイプサーバ
	CPipeServer		m_pipeServer;
};
