#include "StdAfx.h"
#include "CommandPacket.h"
#include "TextTools.h"



CCommandPacket::CCommandPacket(void)
{
	m_xmlRootAccess = m_xmlRoot.GetAccess("");
	m_xmlBasicData = m_xmlRoot.GetAccess("Basic");
	m_xmlAttachedData = m_xmlRoot.GetAccess("Attached");
}

CCommandPacket::CCommandPacket(CCommandPacket &other)
{
	m_xmlRootAccess = m_xmlRoot.GetAccess("");
	m_xmlBasicData = m_xmlRoot.GetAccess("Basic");
	m_xmlAttachedData = m_xmlRoot.GetAccess("Attached");

	m_xmlRootAccess.Copy(other.m_xmlRootAccess);
}

void CCommandPacket::operator=(CCommandPacket &other)
{
	m_xmlRootAccess.Copy(other.m_xmlRootAccess);
}

CCommandPacket::~CCommandPacket(void)
{
}



////////////////////////////////////////////////////////////////////////////////////
//	変換
////////////////////////////////////////////////////////////////////////////////////
/*!
	バッファデータから構築
*/
int CCommandPacket::FromBuffer(CBuffer &data)
{
	m_xmlRootAccess.Clear();

	//	サイズ0?
	if(data.GetSize() == 0)
		return(-1);

	//	ロードしてみる
	if(m_xmlRoot.FromXMLStringUTF8(data))
		return(-1);

	//	コマンド無いとエラー
	if(GetCommand().IsEmpty())
		return(-1);

	return(0);
}


/*!
	バッファデータへ変換
*/
void CCommandPacket::ToBuffer(CBuffer &data)
{
	//	変換
	data.ReSize(0);
	data += m_xmlRoot.ToXMLStringUTF8();
}

////////////////////////////////////////////////////////////////////////////////////
//	基本情報の設定
////////////////////////////////////////////////////////////////////////////////////
/*!
	コマンド設定
*/
void CCommandPacket::SetCommand(CString command)
{
	SetCommandOption("Command", command);
}

/*!
	コマンド取得
*/
CString CCommandPacket::GetCommand()
{
	return(GetCommandOption("Command"));
}

/*!
	オプション項目の設定
*/
void CCommandPacket::SetCommandOption(CString key, CString data)
{
	m_xmlBasicData.SetKeyStr(key, data);
}

/*!
	オプション項目の設定
*/
void CCommandPacket::SetCommandOptionInt(CString key, int data)
{
	m_xmlBasicData.SetKeyInt(key, data);
}

/*!
	オプション項目の取得
*/
CString CCommandPacket::GetCommandOption(CString key, CString data)
{
	return(m_xmlBasicData.GetKeyStr(key, data));
}


/*!
	オプション項目の取得
*/
int CCommandPacket::GetCommandOptionInt(CString key, int data)
{
	return(m_xmlBasicData.GetKeyInt(key, data));
}


////////////////////////////////////////////////////////////////////////////////////
//	まとめて情報を設定
////////////////////////////////////////////////////////////////////////////////////
/*!
	正常終了
*/
void CCommandPacket::SetSuccessPacket()
{
	SetCommand(_T("Success"));
}

/*!
	エラー
*/
void CCommandPacket::SetErrorPacket(int errorCode, CString errorInfo)
{
	SetCommand(_T("Error"));
	SetCommandOptionInt(_T("ErrorCode"), errorCode);
	SetCommandOption(_T("ErrorInfo"), errorInfo);
}
