#include "StdAfx.h" #include "DeviceData.h" #include "CommonFun.h" CDeviceData::CDeviceData() { m_strName = _T(""); m_strGroup = _T(""); m_Value = _T(""); m_nType = 0; //0:int 1:float 2:bool 3:string m_pFunc = NULL; m_nValue = 0; m_fValue = 0; m_bValue = false; m_strValue = _T(""); } CDeviceData::CDeviceData( CString strName,CString strGroup,int nType,CString strValue ) { m_strName = strName; m_strGroup = strGroup; m_nType = nType; //0:int 1:float 2:bool 3:string m_pFunc = NULL; m_nValue = 0; m_fValue = 0; m_bValue = false; m_strValue = _T(""); SetValue(strValue); } CDeviceData::~CDeviceData() { } bool CDeviceData::FireCallback() { if (m_pFunc != NULL) { #ifdef _UNICODE m_pFunc(m_strName.GetBuffer(),m_strGroup.GetBuffer(),m_nType,m_Value.GetBuffer()); #else CStringW wstrName = CCommonFun::mb2wc(m_strName.GetBuffer()).data(); CStringW wstrGroup = CCommonFun::mb2wc(m_strGroup.GetBuffer()).data(); CStringW wstrValue = CCommonFun::mb2wc(m_Value.GetBuffer()).data(); m_pFunc(wstrName.GetBuffer(),wstrGroup.GetBuffer(),m_nType,wstrValue.GetBuffer()); #endif return true; } return false; } bool CDeviceData::operator=( const int nValue ) { if (m_nType != 0) //当前类型不是int { return false; } m_Value.Format(_T("%d"),nValue); if (m_nValue != nValue || (Group() == _T("Message"))||(Group() == _T("Status"))) { m_nValue = nValue; FireCallback(); } return true; } bool CDeviceData::operator=( const float fValue ) { if (m_nType != 1) //当前类型不是float { return false; } m_Value.Format(_T("%f"),fValue); if (m_fValue != fValue || (Group() == _T("Message"))||(Group() == _T("Status"))) { m_fValue = fValue; FireCallback(); } return true; } bool CDeviceData::operator=( const bool bValue ) { if (m_nType != 2) //当前类型不是bool { return false; } if (bValue) m_Value = _T("true"); else m_Value = _T("false"); if (m_bValue != bValue || (Group() == _T("Message"))||(Group() == _T("Status"))) { m_bValue = bValue; FireCallback(); } return true; } bool CDeviceData::operator=( const wchar_t* strValue ) { if (m_nType != 3) //当前类型不是str { return false; } m_Value.Format(_T("%s"),strValue); if (m_strValue != m_Value || (Group() == _T("Message"))||(Group() == _T("Status"))) { m_strValue = m_Value; FireCallback(); } return true; } bool CDeviceData::operator=( const char* strValue ) { if (m_nType != 3) //当前类型不是str { return false; } m_Value.Format(_T("%s"),strValue); if (m_strValue != m_Value || (Group() == _T("Message"))||(Group() == _T("Status"))) { m_strValue = m_Value; FireCallback(); } return true; } bool CDeviceData::operator=( const CString& strValue ) { if (m_nType != 3) //当前类型不是str { return false; } m_Value = strValue; if (m_strValue != strValue || (Group() == _T("Message"))||(Group() == _T("Status"))) { m_strValue = strValue; FireCallback(); } return true; } CString CDeviceData::Name() { return m_strName; } CString CDeviceData::Group() { return m_strGroup; } int CDeviceData::Type() { return m_nType; } int CDeviceData::nValue() { return m_nValue; } float CDeviceData::fValue() { return m_fValue; } bool CDeviceData::bValue() { return m_bValue; } CString CDeviceData::strValue() { return m_strValue; } int CDeviceData::Init( CString strName,CString strGroup,int nValue,pCallbackfun pfun ) { m_pFunc = pfun; m_strName = strName; m_strGroup = strGroup; m_nType = 0; m_nValue = nValue; m_Value.Format(_T("%d"),nValue); FireCallback(); return 0; } int CDeviceData::Init( CString strName,CString strGroup,float fValue,pCallbackfun pfun ) { m_pFunc = pfun; m_strName = strName; m_strGroup = strGroup; m_nType = 1; m_fValue = fValue; m_Value.Format(_T("%f"),fValue); FireCallback(); return 0; } int CDeviceData::Init( CString strName,CString strGroup,bool bValue,pCallbackfun pfun ) { m_pFunc = pfun; m_strName = strName; m_strGroup = strGroup; m_nType = 2; m_bValue = bValue; if (m_bValue) { m_Value = _T("true"); } else { m_Value = _T("false"); } FireCallback(); return 0; } int CDeviceData::Init( CString strName,CString strGroup,CString strValue,pCallbackfun pfun ) { m_pFunc = pfun; m_strName = strName; m_strGroup = strGroup; m_nType = 3; m_strValue = strValue; m_Value = m_strValue; FireCallback(); return 0; } int CDeviceData::Init( CString strName,CString strGroup,const wchar_t* strValue,pCallbackfun pfun ) { m_pFunc = pfun; m_strName = strName; m_strGroup = strGroup; m_nType = 3; m_strValue = strValue; m_Value = m_strValue; FireCallback(); return 0; } int CDeviceData::Init( CString strName,CString strGroup,const char* strValue,pCallbackfun pfun ) { m_pFunc = pfun; m_strName = strName; m_strGroup = strGroup; m_nType = 3; m_strValue = strValue; m_Value = m_strValue; FireCallback(); return 0; } bool CDeviceData::SetValue( CString strValue ) { int nData; float fData; switch(m_nType) { case 0: //int类型 #ifdef _UNICODE nData = _wtoi(strValue); #else nData = atoi(strValue); #endif return *this = nData; break; case 1: //float类型 #ifdef _UNICODE fData = (float)_wtof(strValue); #else fData = (float)atof(strValue); #endif return *this = fData; break; case 2: //int类型 if (strValue.MakeLower() == _T("true")) return *this = true; else if (strValue.MakeLower() == _T("false")) return *this = false; break; case 3: //str类型 return *this = strValue; break; default: break; } return false; } CString CDeviceData::Data() { return m_Value; } CString CDeviceData::strType() { CString strtype; switch(m_nType) { case 0: //int类型 strtype = _T("int"); break; case 1: //float类型 strtype = _T("float"); break; case 2: //bool类型 strtype = _T("bool"); break; case 3: //str类型 strtype = _T("string"); break; default: strtype.Format(_T("%d"),m_nType); break; } return strtype; }