#pragma once
#include "SyncObject.h"
#include "Workspace.h"

/*!
	コンテキストを提供するクラス
	各接続の詳細情報は、すべてこのコンテキストに保存される
*/
class CContextManager
{
public:
	CContextManager(void);
	virtual ~CContextManager(void);

	//////////////////////////////////////////////////////////////////////////////////////
	//	インタフェース
	//////////////////////////////////////////////////////////////////////////////////////
	//!	初期化
	int Start(CWorkspaceAccess setting);

	//!	新規コンテキスト
	CWorkspaceAccess GetNewContext();

	//!	コンテキスト利用完了
	void DeleteContext(CWorkspaceAccess context);

	//!	日付取得
	void GetDate(CWorkspaceAccess date, int detail = FALSE);

	//!	コピーを取得
	void GetContextCopy(CWorkspaceAccess copyTo);

	//!	テキストとして取得
	CString GetContextByXMLString();

protected:
	//////////////////////////////////////////////////////////////////////////////////////
	//	ツール関数
	//////////////////////////////////////////////////////////////////////////////////////
	//!	新規ID
	int GetNewID();

protected:
	//////////////////////////////////////////////////////////////////////////////////////
	//	メンバ変数
	//////////////////////////////////////////////////////////////////////////////////////
	//!	保存コンテキスト数
	int					m_contextLogCount;

	//!	IDカウンタ
	CInterlockCounter	m_idCounter;

	//!	コンテキスト用ワークスペース
	CWorkspace			m_contextRoot;

	//!	作業中コンテキスト
	CWorkspaceAccess	m_context;

	//!	終了コンテキスト
	CWorkspaceAccess	m_contextLog;
};
