////////////////////////////////////////////////////////////////////////////
// CNegCmd クラスのインタフェース宣言
// 主筆クライアントから送られてきたコマンドを解釈する
////////////////////////////////////////////////////////////////////////////

#if !defined( NEGCMD_H_INCLUDED_ )
#define NEGCMD_H_INCLUDED_

#include <map>
#include <string>

using namespace std;

class CNegCmd
{
public:
	CNegCmd( const char *pStr, int len );
	CNegCmd( int fd );
	CNegCmd();
	CNegCmd( const CNegCmd& r );
	~CNegCmd();

	// 値を取得
	int GetData( int ID, int def ) const;
	const string& GetData( int ID, const string& def ) const;
	bool HasData( int ID ) const;

	// 値を追加
	void AddData( int ID, const void *pData, int DataLen );
	void AddData( int ID, const char *pData );
	void AddData( int ID, const string& rData );
	void AddData( int ID, int d );

	// 送信用文字列を取得
	string GetSendData() const;

	// 代入
	const CNegCmd& operator =( const CNegCmd &r );

	// 初期化
	void Initialize();

protected:
	// データを解析する
	bool Recognize( const char *pStr, int len );

	bool GetInt( const char *pStr, int len, int *val );

	// IDと値の組を保持
	map< int, string > mapCmd;
};

#endif // NEGCMD_H_INCLUDED_

