Files
geomative/GeomativeStudio/cpp/Tools/GD10OperCmd.cpp
T
coco df489d5640 a
2026-07-03 16:05:30 +08:00

1213 lines
34 KiB
C++

// GD10OperCmd.cpp: implementation of the CGD10OperCmd class.
//
//////////////////////////////////////////////////////////////////////
#include "geomative.h"
#include "GD10OperCmd.h"
#include "DetcGD10Dev.h"
#include "Markup.h"
#include "FileOperTools.h"
#include <DbgHelp.h>
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
extern int g_iTransFileMode;
CGD10OperCmd* CGD10OperCmd::m_pGD10Oper = NULL;
extern void SplitterString(CStringArray &szArray,const CString& szSource, const CString& szSplitter);
extern int g_iUILanguage;
CGD10OperCmd::CGD10OperCmd()
{
}
CGD10OperCmd::~CGD10OperCmd()
{
}
CGD10OperCmd* CGD10OperCmd::GetInstance()
{
if (EN_TRANSFER_FILE_BY_USB != g_iTransFileMode)
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("设备工作状态错误"));
else
MessageBoxEx(NULL, _T("Gd20 work status error!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
return NULL;
}
if (NULL == m_pGD10Oper)
{
m_pGD10Oper = new CGD10OperCmd();
}
return m_pGD10Oper;
}
//返回值的含义:
//1:成功,0:失败,-1:新建目录失败
int CGD10OperCmd::project_add(const char *mac,const char *projectcn)
{
if (!CDetcGD10Dev::GetInstance()->IsGD10DevConnect())
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("请确保主机设备连上Geomative Studio!"));
else
MessageBoxEx(NULL, _T("Please make sure gd20 device was connected to Geomative Studio!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
return 0;
}
if (NULL == mac || NULL == projectcn)
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("添加工程参数错误"));
else
MessageBoxEx(NULL, _T("Add project paramter error!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
return 0;
}
if (!AddProjectInLocalHost(projectcn))
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("添加工程到本机失败"));
else
MessageBoxEx(NULL, _T("Add project to localhost failed!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
return -2;
}
if (!AddProjectInMacXml(mac, projectcn))
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("添加工程到mac失败"));
else
MessageBoxEx(NULL, _T("Add project to mac failed!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
return -2;
}
CString strPath = _T("");
CString strInfo = _T("");
strPath.Format(_T("%s\\sd\\projects\\%s\\"),CDetcGD10Dev::GetInstance()->GetGD10DevAddr(),projectcn);
if (!MakeSureDirectoryPathExists(strPath))
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("GD20设备创建工程失败"));
else
MessageBoxEx(NULL, _T("Create project in gd20 device failed"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
strInfo.Format(_T("[CGD10OperCmd][%d]create project in gd20 device failed!path = %s"),__LINE__, strPath);
CFileOperTools::GetInstance()->WriteComLog(strPath);
return -1;
}
return 1;
}
bool CGD10OperCmd::AddProjectInLocalHost(const char *pProjectCN)
{
CString strPath = _T("");
CString strInfo = _T("");
if (NULL == pProjectCN)
{
strInfo.Format(_T("[CGD10OperCmd][%d]pProjectCN can't be null!"));
CFileOperTools::GetInstance()->WriteComLog(strInfo);
return false;
}
strPath.Format(_T("%s\\%s"),CDetcGD10Dev::GetInstance()->GetGD10DevAddr(), _T("sd\\users\\localhost.xml"));
CMarkup markup;
bool bOperXml = false;
if (markup.Load(strPath))
{
if (markup.FindChildElem(_T("user_info")))
{
markup.IntoElem();
if (markup.FindChildElem(_T("path_dictionary")))
{
markup.IntoElem();
//操作成功
if (markup.AddChildElem(_T("path"), pProjectCN))
{
bOperXml = true;
markup.Save(strPath);
}
else
{
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]add elemet %s in file failed! filePath = %s"),__LINE__, pProjectCN,strPath);
}
}
else
{
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]find path_dictionary element failed!filePath = %s"),__LINE__, strPath);
}
}
else
{
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]find user_info element failed!filePath = %s"),__LINE__, strPath);
}
}
else
{
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]load file %s failed!"),__LINE__, strPath);
}
//只有操作失败时才写日志文件
if (!bOperXml)
{
CFileOperTools::GetInstance()->WriteComLog(strInfo);
}
return bOperXml;
}
bool CGD10OperCmd::AddProjectInMacXml(const char* pMac,const char *pProjectCN)
{
CString strPath = _T("");
CString strInfo = _T("");
if (NULL == pProjectCN || NULL == pMac)
{
strInfo.Format(_T("[CGD10OperCmd][%d]pProjectCN or pMac can't be null!"));
CFileOperTools::GetInstance()->WriteComLog(strInfo);
return false;
}
strPath.Format(_T("%s\\sd\\users\\%s.xml"),CDetcGD10Dev::GetInstance()->GetGD10DevAddr(), pMac);
CMarkup markup;
bool bOperXml = false;
if (markup.Load(strPath))
{
if (markup.FindChildElem(_T("user_info")))
{
markup.IntoElem();
if (markup.FindChildElem(_T("path_dictionary")))
{
markup.IntoElem();
//操作成功
if (markup.AddChildElem(_T("path"), pProjectCN))
{
bOperXml = true;
markup.Save(strPath);
}
else
{
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]add elemet %s in file failed! filePath = %s"),__LINE__, pProjectCN,strPath);
}
}
else
{
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]find path_dictionary element failed!filePath = %s"),__LINE__, strPath);
}
}
else
{
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]find user_info element failed!filePath = %s"),__LINE__, strPath);
}
}
else
{
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]load file %s failed!"),__LINE__, strPath);
}
//只有操作失败时才写日志文件
if (!bOperXml)
{
CFileOperTools::GetInstance()->WriteComLog(strInfo);
}
return bOperXml;
}
bool CGD10OperCmd::DelProjectInMacXml(const char* pMac,const char *pProjectCN)
{
CString strPath = _T("");
CString strInfo = _T("");
CString strText = _T("");
if (NULL == pProjectCN || NULL == pMac)
{
strInfo.Format(_T("[CGD10OperCmd][%d]pProjectCN or pMac can't be null!"));
CFileOperTools::GetInstance()->WriteComLog(strInfo);
return false;
}
strPath.Format(_T("%s\\sd\\users\\%s.xml"),CDetcGD10Dev::GetInstance()->GetGD10DevAddr(), pMac);
CMarkup markup;
bool bOperXml = false;
if (markup.Load(strPath))
{
if (markup.FindChildElem(_T("user_info")))
{
markup.IntoElem();
if (markup.FindChildElem(_T("path_dictionary")))
{
markup.IntoElem();
//在这里需要遍历整个path,如果遍历完,依然没有该projcetCN,也认为是成功的
//如果找到了并且删除失败,则置位标记位为false,
while(markup.FindChildElem(_T("path")))
{
strText.Empty();
strText = markup.GetChildData();
//如果找到了则进行删除操作
if (0 == strText.Compare(pProjectCN))
{
if (!markup.RemoveChildElem())
{
bOperXml = false;
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]delete element %s failed!filePath = %s"),__LINE__, pProjectCN, strPath);
break;
}
}
bOperXml = true;
}
}
else
{
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]find path_dictionary element failed!filePath = %s"),__LINE__, strPath);
}
}
else
{
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]find user_info element failed!filePath = %s"),__LINE__, strPath);
}
}
else
{
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]load file %s failed!"),__LINE__, strPath);
}
//只有操作失败时才写日志文件
if (!bOperXml)
{
CFileOperTools::GetInstance()->WriteComLog(strInfo);
}
//操作成功时,保存所做的修改
else
{
markup.Save(strPath);
}
return bOperXml;
}
bool CGD10OperCmd::DelProjectInLocalHost(const char *pProjectCN)
{
CString strPath = _T("");
CString strInfo = _T("");
CString strText = _T("");
if (NULL == pProjectCN)
{
strInfo.Format(_T("[CGD10OperCmd][%d]pProjectCN or pMac can't be null!"));
CFileOperTools::GetInstance()->WriteComLog(strInfo);
return false;
}
strPath.Format(_T("%s\\sd\\users\\localhost.xml"),CDetcGD10Dev::GetInstance()->GetGD10DevAddr());
CMarkup markup;
bool bOperXml = false;
if (markup.Load(strPath))
{
if (markup.FindChildElem(_T("user_info")))
{
markup.IntoElem();
if (markup.FindChildElem(_T("path_dictionary")))
{
markup.IntoElem();
//在这里需要遍历整个path,如果遍历完,依然没有该projcetCN,也认为是成功的
//如果找到了并且删除失败,则置位标记位为false,
while(markup.FindChildElem(_T("path")))
{
strText.Empty();
strText = markup.GetChildData();
//如果找到了则进行删除操作
if (0 == strText.Compare(pProjectCN))
{
if (!markup.RemoveChildElem())
{
bOperXml = false;
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]delete element %s failed!filePath = %s"),__LINE__, pProjectCN, strPath);
break;
}
}
bOperXml = true;
}
}
else
{
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]find path_dictionary element failed!filePath = %s"),__LINE__, strPath);
}
}
else
{
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]find user_info element failed!filePath = %s"),__LINE__, strPath);
}
}
else
{
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]load file %s failed!"),__LINE__, strPath);
}
//只有操作失败时才写日志文件
if (!bOperXml)
{
CFileOperTools::GetInstance()->WriteComLog(strInfo);
}
//操作成功时,保存所做的修改
else
{
markup.Save(strPath);
}
return bOperXml;
}
bool CGD10OperCmd::project_delete(const char *mac,const char *projectcn)
{
if (!CDetcGD10Dev::GetInstance()->IsGD10DevConnect())
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("请确保主机设备连上Geomative Studio!"));
else
MessageBoxEx(NULL, _T("Please make sure gd20 device was connected to Geomative Studio!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
return false;
}
if (NULL == mac || NULL == projectcn)
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("添加工程参数错误"));
else
MessageBoxEx(NULL, _T("Add project paramter error!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
return false;
}
//如果xml相应的记录信息都被成功删除的话,则此时删除相应的目录
if (DelProjectInLocalHost(projectcn) && DelProjectInMacXml(mac, projectcn))
{
CString strPath = _T("");
strPath.Format(_T("%s\\sd\\projects\\%s\\"),CDetcGD10Dev::GetInstance()->GetGD10DevAddr(),projectcn);
if (CFileOperTools::GetInstance()->DeleteDirectory(strPath))
{
return true;
}
CString strInfo = _T("");
strInfo.Format(_T("[CGD10OperCmd][%d]DeleteDirectory %s failed!"), __LINE__, strPath);
CFileOperTools::GetInstance()->WriteComLog(strInfo);
}
return false;
}
//模拟下微机进行测区的创建
//其中返回值的含义为1:成功 0:参数错误 -1:创建目录失败 -2:文件读写失败
int CGD10OperCmd::testzone_add(const char *projectcn,const char *testzonecn,const char *type)
{
if (!CDetcGD10Dev::GetInstance()->IsGD10DevConnect())
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("请确保主机设备连上Geomative Studio!"));
else
MessageBoxEx(NULL, _T("Please make sure gd20 device was connected to Geomative Studio!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
return 0;
}
if (NULL == projectcn || NULL == testzonecn || NULL == type)
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("tz_add中的输入参数错误!"));
else
MessageBoxEx(NULL, _T("Input parameter error in tz_add!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
return 0;
}
CString strPath = _T("");
CString strInfo = _T("");
strPath.Format(_T("%s\\sd\\projects\\%s\\%s\\"),CDetcGD10Dev::GetInstance()->GetGD10DevAddr(), projectcn, testzonecn);
//创建文件目录
if (!MakeSureDirectoryPathExists(strPath))
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("在gd20设备中创建tz失败!"));
else
MessageBoxEx(NULL, _T("Create tz in gd20 device failed!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
strInfo.Format(_T("[CGD10OperCmd][%d]create tz in gd20 device failed!path = %s"),__LINE__, strPath);
CFileOperTools::GetInstance()->WriteComLog(strPath);
return -1;
}
//修改相应的xml文件
strPath.Empty();
strPath.Format(_T("%s\\sd\\projects\\%s\\project.xml"), CDetcGD10Dev::GetInstance()->GetGD10DevAddr(), projectcn);
CMarkup markup;
bool bOperXml = false;
if (markup.Load(strPath))
{
if (markup.FindElem(_T("project")))
{
markup.IntoElem();
if (markup.FindElem(_T("testzones")))
{
//操作成功
if (markup.AddChildElem(_T("testzone"), testzonecn))
{
markup.AddChildAttrib(_T("TYPE"),type);
bOperXml = true;
markup.Save(strPath);
}
else
{
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]add elemet %s in file failed! filePath = %s"),__LINE__, testzonecn,strPath);
}
}
else
{
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]find testzones element failed!filePath = %s"),__LINE__, strPath);
}
}
else
{
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]find project element failed!filePath = %s"),__LINE__, strPath);
}
}
else
{
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]load file %s failed!"),__LINE__, strPath);
}
if (!bOperXml)
{
CFileOperTools::GetInstance()->WriteComLog(strInfo);
return -2;
}
return 1;
}
int CGD10OperCmd::testzone_delete(const char *projectcn,const char *testzonecn)
{
if (!CDetcGD10Dev::GetInstance()->IsGD10DevConnect())
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("请确保主机设备连上Geomative Studio!"));
else
MessageBoxEx(NULL, _T("Please make sure gd20 device was connected to Geomative Studio!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
return 0;
}
if (NULL == projectcn || NULL == testzonecn)
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("在tz_del中输入参数错误!"));
else
MessageBoxEx(NULL, _T("Input parameter error in tz_del!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
return 0;
}
CString strPath = _T("");
CString strInfo = _T("");
CString strText = _T("");
strPath.Format(_T("%s\\sd\\projects\\%s\\project.xml"), CDetcGD10Dev::GetInstance()->GetGD10DevAddr(), projectcn);
CMarkup markup;
bool bOperXml = false;
if (markup.Load(strPath))
{
if (markup.FindElem(_T("project")))
{
markup.IntoElem();
if (markup.FindElem(_T("testzones")))
{
//在这里需要遍历整个testzone,如果遍历完,依然没有该testzonecn,也认为是成功的
//如果找到了并且删除失败,则置位标记位为false,
while(markup.FindChildElem(_T("testzone")))
{
strText.Empty();
strText = markup.GetChildData();
//如果找到了则进行删除操作
if (0 == strText.Compare(testzonecn))
{
if (!markup.RemoveChildElem())
{
bOperXml = false;
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]delete element %s failed!filePath = %s"),__LINE__, testzonecn, strPath);
break;
}
}
bOperXml = true;
}
}
else
{
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]find testzones element failed!filePath = %s"),__LINE__, strPath);
}
}
else
{
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]find project element failed!filePath = %s"),__LINE__, strPath);
}
}
else
{
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]load file %s failed!"),__LINE__, strPath);
}
//只有操作失败时才写日志文件
if (!bOperXml)
{
CFileOperTools::GetInstance()->WriteComLog(strInfo);
return -2;
}
//操作成功时,保存所做的修改
else
{
markup.Save(strPath);
}
//删除相应的目录
strPath.Empty();
strPath.Format(_T("%s\\sd\\projects\\%s\\%s\\"),CDetcGD10Dev::GetInstance()->GetGD10DevAddr(), projectcn, testzonecn);
if (CFileOperTools::GetInstance()->DeleteDirectory(strPath))
{
return 1;
}
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]delete directory %s failed!"),__LINE__, strPath);
CFileOperTools::GetInstance()->WriteComLog(strInfo);
return -1;
}
int CGD10OperCmd::script_add(const char *scriptcn,const char *scriptname,const char *mudiumid)
{
if (!CDetcGD10Dev::GetInstance()->IsGD10DevConnect())
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("请确保主机设备连上Geomative Studio!"));
else
MessageBoxEx(NULL, _T("Please make sure gd20 device was connected to Geomative Studio!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
return 0;
}
if (NULL == scriptcn || NULL == scriptname || NULL == mudiumid)
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("输入参数错误在spt_add!"));
else
MessageBoxEx(NULL, _T("Input parameter error in spt_add!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
return 0;
}
CString strPath = _T("");
CString strInfo = _T("");
CString strCN = _T("");
CString strType = _T("");
strCN.Format(_T("%s"),scriptcn);
strCN = strCN.Left(3);
if (_T("VES") == strCN)
{
strType = _T("0");
}
else if (_T("ERI") == strCN)
{
strType = _T("1");
}
else if (_T("ERT") == strCN)
{
strType = _T("2");
}
else
{
if (LANG_ZHCN == g_iUILanguage)
{
strInfo.Format(_T("未知脚本类型(%s)!"), strCN);
AfxMessageBox(strInfo);
}
else
{
strInfo.Format(_T("Unknow script type(%s)!"), strCN);
MessageBoxEx(NULL, strInfo, STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
}
return 0;
}
//修改相应的xml文件
strPath.Format(_T("%s\\sd\\scripts\\scripts.xml"), CDetcGD10Dev::GetInstance()->GetGD10DevAddr());
CMarkup markup;
bool bOperXml = false;
if (markup.Load(strPath))
{
if (markup.FindElem(_T("scripts")))
{
//操作成功
if (markup.AddChildElem(_T("script"), scriptcn))
{
markup.AddChildAttrib(_T("type"), strType);
markup.AddChildAttrib(_T("name"), scriptname);
markup.AddChildAttrib(_T("mudium"),mudiumid);
bOperXml = true;
markup.Save(strPath);
}
else
{
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]add elemet %s in file failed! filePath = %s"),__LINE__, scriptcn,strPath);
}
}
else
{
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]find scripts element failed!filePath = %s"),__LINE__, strPath);
}
}
else
{
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]load file %s failed!"),__LINE__, strPath);
}
if (!bOperXml)
{
CFileOperTools::GetInstance()->WriteComLog(strInfo);
return -2;
}
return 1;
}
bool CGD10OperCmd::script_delete(const char *scriptcn)
{
if (!CDetcGD10Dev::GetInstance()->IsGD10DevConnect())
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("请确保主机设备连上Geomative Studio!"));
else
MessageBoxEx(NULL, _T("Please make sure gd20 device was connected to Geomative Studio!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
return 0;
}
if (NULL == scriptcn)
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("输入参数错误在spt_del!"));
else
MessageBoxEx(NULL, _T("Input parameter error in spt_del!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
return 0;
}
CString strPath = _T("");
CString strInfo = _T("");
CString strText = _T("");
strPath.Format(_T("%s\\sd\\scripts\\scripts.xml"), CDetcGD10Dev::GetInstance()->GetGD10DevAddr());
CMarkup markup;
bool bOperXml = false;
if (markup.Load(strPath))
{
if (markup.FindElem(_T("scripts")))
{
//在这里需要遍历整个testzone,如果遍历完,依然没有该testzonecn,也认为是成功的
//如果找到了并且删除失败,则置位标记位为false,
while(markup.FindChildElem(_T("script")))
{
strText.Empty();
strText = markup.GetChildData();
//如果找到了则进行删除操作
if (0 == strText.Compare(scriptcn))
{
//如果删除的脚本是跨孔(Geomative)装置则需要删除对应的脚本坐标文件
CString strMedium = markup.GetChildAttrib(_T("mudium"));
if (AR_CROSS_HOLE_GEOMATIVE == atoi(strMedium)
|| AR_CROSS_HOLE_GEOMATIVE_AM == atoi(strMedium))
{
CString strScriptPath;
CMarkup markupScript;
strScriptPath.Format(_T("%ssd\\scripts\\%s.scr"), CDetcGD10Dev::GetInstance()->GetGD10DevAddr(),strText);
if (markupScript.Load(strScriptPath))
{
if (markupScript.FindElem(_T("script")))
{
if (markupScript.FindChildElem(_T("C_H_Script")))
{
CString strCoordinatesFile = markupScript.GetChildData();
CString strFilePath;
strFilePath.Format(_T("%ssd\\scripts\\%s"), CDetcGD10Dev::GetInstance()->GetGD10DevAddr(), strCoordinatesFile);
bool bRes = false;
BYTE bTimes = 0;
do
{
bRes = DeleteFile(strFilePath);
if (false == bRes)
{
CFileOperTools::GetInstance()->WriteComLog(_T("zm:CGD10OperCmd::script_delete delete file Failed!"));
Sleep(5000);
}
bTimes++;
} while (!bRes && (bTimes <= 3));
if (bRes == false && bTimes > 3)
{
CFileOperTools::GetInstance()->WriteComLog(_T("zm:CGD10OperCmd::script_delete delete file Failed!"));
}
}
}
}
}
if (!markup.RemoveChildElem())
{
bOperXml = false;
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]delete element %s failed!filePath = %s"),__LINE__, scriptcn, strPath);
break;
}
}
bOperXml = true;
}
}
else
{
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]find scripts element failed!filePath = %s"),__LINE__, strPath);
}
}
else
{
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]load file %s failed!"),__LINE__, strPath);
}
//只有操作失败时才写日志文件
if (!bOperXml)
{
CFileOperTools::GetInstance()->WriteComLog(strInfo);
return false;
}
//操作成功时,保存所做的修改
else
{
markup.Save(strPath);
}
//删除脚本文件
strPath.Empty();
strPath.Format(_T("%s\\sd\\scripts\\%s.scr"), CDetcGD10Dev::GetInstance()->GetGD10DevAddr(),scriptcn);
if (CFileOperTools::GetInstance()->DeleteFileDirect(strPath))
{
return true;
}
return false;
}
bool CGD10OperCmd::meas_delete(const char *projectcn, const char *testzonecn, const char *measuringcn)
{
if (NULL == projectcn || NULL == testzonecn || NULL == measuringcn)
{
return false;
}
if (!CDetcGD10Dev::GetInstance()->IsGD10DevConnect())
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("请确保主机设备连上Geomative Studio!"));
else
MessageBoxEx(NULL, _T("Please make sure gd20 device was connected to Geomative Studio!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
return false;
}
//首先删除测区文件中的任务的信息,再删除具体文件,此时如果删除关联成功而删除文件出错的话,
//那么也认为是删除成功,因为此时最多只是产生些垃圾文件而已
CString strPath = _T("");
strPath.Format(_T("%s\\sd\\projects\\%s\\%s\\testzone.xml"),CDetcGD10Dev::GetInstance()->GetGD10DevAddr(), projectcn,testzonecn);
if (!DeleteTaskInTz(strPath, measuringcn))
{
return false;
}
//现在删除文件
strPath.Empty();
strPath.Format(_T("%s\\sd\\projects\\%s\\%s"),CDetcGD10Dev::GetInstance()->GetGD10DevAddr(), projectcn,testzonecn);
DeleteTaskFile(strPath, measuringcn);
return true;
}
bool CGD10OperCmd::DeleteTaskInTz(const CString &strTzPath, const char*pMeasuringcn)
{
if (strTzPath.IsEmpty())
{
return false;
}
CString strTaskCN = _T("");
CString strTmp = _T("");
CString strElement = _T("");
CString strInfo = _T("");
CString strText = _T("");
strTaskCN.Format(_T("%s"), pMeasuringcn);
CMarkup markup;
bool bOperXml = false;
if (markup.Load(strTzPath))
{
strTmp = strTaskCN.Left(3);
strTmp.MakeLower();
strElement = strTmp + _T("s");
if (markup.FindChildElem(strElement))
{
markup.IntoElem();
//在这里需要遍历整个path,如果遍历完,依然没有该projcetCN,也认为是成功的
//如果找到了并且删除失败,则置位标记位为false,
while(markup.FindChildElem(strTmp))
{
strText.Empty();
strText = markup.GetChildData();
//如果找到了则进行删除操作
if (0 == strText.Compare(strTaskCN))
{
if (!markup.RemoveChildElem())
{
bOperXml = false;
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]delete element %s failed!filePath = %s"),__LINE__, strTaskCN, strTzPath);
break;
}
}
bOperXml = true;
}
}
else
{
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]find %s element failed!filePath = %s"),__LINE__, strElement, strTzPath);
}
}
else
{
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]load file %s failed!"),__LINE__, strTzPath);
}
//只有操作失败时才写日志文件
if (!bOperXml)
{
CFileOperTools::GetInstance()->WriteComLog(strInfo);
return false;
}
//操作成功时,保存所做的修改
else
{
if (markup.Save(strTzPath))
{
return true;
}
strInfo.Empty();
strInfo.Format(_T("[CGD10OperCmd][%d]save test_zone file failed when delete task!task_cn = %s, file_path = %s"),__LINE__, strTaskCN, strTzPath);
CFileOperTools::GetInstance()->WriteComLog(strInfo);
return false;
}
}
bool CGD10OperCmd::DeleteTaskFile(const CString &strTzFolderPath, const char*pMeasuringcn)
{
if (strTzFolderPath.IsEmpty())
{
return false;
}
if (NULL == pMeasuringcn)
{
return false;
}
//同时删除相应的文件名的 *.dat *.idx *.org *.rec *.res *.xml
CString strDelFile = _T("");
strDelFile.Format(_T("%s\\%s.dat"),strTzFolderPath,pMeasuringcn);
bool bRes = true;
if (!CFileOperTools::GetInstance()->DeleteFileDirect(strDelFile))
{
bRes = false;
}
strDelFile.Empty();
strDelFile.Format(_T("%s\\%s.idx"),strTzFolderPath,pMeasuringcn);
if (!CFileOperTools::GetInstance()->DeleteFileDirect(strDelFile))
{
bRes = false;
}
strDelFile.Empty();
strDelFile.Format(_T("%s\\%s.org"),strTzFolderPath,pMeasuringcn);
if (!CFileOperTools::GetInstance()->DeleteFileDirect(strDelFile))
{
bRes = false;
}
strDelFile.Empty();
strDelFile.Format(_T("%s\\%s.rec"),strTzFolderPath,pMeasuringcn);
if (!CFileOperTools::GetInstance()->DeleteFileDirect(strDelFile))
{
bRes = false;
}
strDelFile.Empty();
strDelFile.Format(_T("%s\\%s.res"),strTzFolderPath,pMeasuringcn);
if (!CFileOperTools::GetInstance()->DeleteFileDirect(strDelFile))
{
bRes = false;
}
strDelFile.Empty();
strDelFile.Format(_T("%s\\%s.xml"),strTzFolderPath,pMeasuringcn);
if (!CFileOperTools::GetInstance()->DeleteFileDirect(strDelFile))
{
bRes = false;
}
return bRes;
}
bool CGD10OperCmd::set_param(const CString& strParam)
{
if (strParam.IsEmpty())
{
return false;
}
if (!CDetcGD10Dev::GetInstance()->IsGD10DevConnect())
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("请确保主机设备连上Geomative Studio!"));
else
MessageBoxEx(NULL, _T("Please make sure gd20 device was connected to Geomative Studio!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
return false;
}
CString strLog = _T("");
CStringArray strCmdArr;
strCmdArr.RemoveAll();
CString strFilePath = _T("");
strFilePath.Format(_T("%s\\sd\\equipment\\equipment.xml"),CDetcGD10Dev::GetInstance()->GetGD10DevAddr());
SplitterString(strCmdArr, strParam, _T(";"));
if (strCmdArr.GetSize() < 1)
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("输入参数错误!"));
else
MessageBoxEx(NULL, _T("Input paramter error!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
return false;
}
CMarkup markup;
if (!markup.Load(strFilePath))
{
strLog.Empty();
strLog.Format(_T("[CGD10OperCmd][%d]load file %s failed!"),__LINE__, strFilePath);
CFileOperTools::GetInstance()->WriteComLog(strLog);
return false;
}
CStringArray strParamArr;
CString strNode,strFlag, strVal;
for (int i = 0; i < strCmdArr.GetSize(); i++)
{
strParamArr.RemoveAll();
strFlag.Empty();
strVal.Empty();
strNode.Empty();
SplitterString(strParamArr, strCmdArr.GetAt(i), _T(","));
int iSize = strParamArr.GetSize();
switch (iSize)
{
case 2:
strFlag = strParamArr.GetAt(0);
strVal = strParamArr.GetAt(1);
break;
case 3:
strFlag = strParamArr.GetAt(0);
strVal.Format(_T("%s,%s"),strParamArr.GetAt(1),strParamArr.GetAt(2));
break;
default:
strLog.Empty();
strLog.Format(_T("[CGD10OperCmd][%d]Parser input paramter error!error_paramter = %s"),__LINE__,strParam);
CFileOperTools::GetInstance()->WriteComLog(strLog);
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("解析输入参数错误!"));
else
MessageBoxEx(NULL, _T("Parser input paramter error!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
return false;
}
//用这*个条件来判断是否为修改时窗
if (_T("*") == strFlag.Left(1))
{
strNode = _T("apparent_chargeability");
strFlag.TrimLeft(_T("*"));
}
else
{
strNode = _T("parameter");
}
if (markup.FindChildElem(strNode))
{
markup.IntoElem();
if (markup.FindChildElem(strFlag))
{
if (!markup.SetChildData(strVal))
{
strLog.Empty();
strLog.Format(_T("[CGD10OperCmd][%d]set %s element value failed!value = %s,filePath = %s"),__LINE__, strFlag, strVal,strFilePath);
CFileOperTools::GetInstance()->WriteComLog(strLog);
return false;
}
}
else
{
strLog.Empty();
strLog.Format(_T("[CGD10OperCmd][%d]find %s element failed!filePath = %s"),__LINE__, strFlag, strFilePath);
CFileOperTools::GetInstance()->WriteComLog(strLog);
return false;
}
}
else
{
strLog.Empty();
strLog.Format(_T("[CGD10OperCmd][%d]find %s element failed!filePath = %s"),__LINE__, strNode, strFilePath);
CFileOperTools::GetInstance()->WriteComLog(strLog);
return false;
}
markup.ResetPos();
}
if (markup.Save(strFilePath))
{
return true;
}
strLog.Empty();
strLog.Format(_T("[CGD10OperCmd][%d]save file failed when set param! file_path = %s"),__LINE__, strFilePath);
CFileOperTools::GetInstance()->WriteComLog(strLog);
return false;
}
bool CGD10OperCmd::unregister_user(CString strMacAddr)
{
if (strMacAddr.IsEmpty())
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("输入参数不能为空"));
else
MessageBoxEx(NULL, _T("Input paramter can not be empty!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
return false;
}
if (!CDetcGD10Dev::GetInstance()->IsGD10DevConnect())
{
if (LANG_ZHCN == g_iUILanguage)
AfxMessageBox(_T("请确保主机设备连上Geomative Studio!"));
else
MessageBoxEx(NULL, _T("Please make sure gd20 device was connected to Geomative Studio!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
return false;
}
CString strPath = _T("");
strPath.Format(_T("%s\\sd\\users\\%s.xml"),CDetcGD10Dev::GetInstance()->GetGD10DevAddr(),strMacAddr);
if (CFileOperTools::GetInstance()->DeleteFileDirect(strPath))
{
return true;
}
return false;
}
UINT CGD10OperCmd::LoadDevMarkDataFormGDThread(LPVOID lParam)
{
bool bRes = false;
CString strSDRecordDir = _T("");
CString strSDRecordFile = _T("");
strSDRecordDir = CDetcGD10Dev::GetInstance()->GetGD10DevAddr();
if (strSDRecordDir.IsEmpty())
{
return bRes;
}
strSDRecordDir.Format(_T("%sSD\\record"), strSDRecordDir);
strSDRecordFile.Format(_T("%s\\record.log"), strSDRecordDir);
WIN32_FIND_DATA wfd;
HANDLE hFind = FindFirstFile(strSDRecordFile, &wfd);
if (INVALID_HANDLE_VALUE == hFind)
{
CFileOperTools::GetInstance()->WriteComLog(_T("CGD10OperCmd::LoadDevMarkDataFormGDThread() The record.log file was not found on the GD device!"));
return bRes;
}
CString szCurFilePath = _T("");
szCurFilePath.Empty();
szCurFilePath.GetBufferSetLength(256);
::GetCurrentDirectory(szCurFilePath.GetLength(), szCurFilePath.GetBuffer(szCurFilePath.GetLength()));
szCurFilePath.ReleaseBuffer();
CString strDestPath = _T("");
strDestPath.Format(_T("%s\\record"), szCurFilePath);
if (0 == CreateDirectory(strDestPath, NULL))
{
DWORD dwErr = GetLastError();
CString strLog;
strLog.Format(_T("zm: Load Dev Mark Data Form GD (CreateDirectory err=%d)"),dwErr);
CFileOperTools::GetInstance()->WriteComLog(strLog);
return bRes;
}
int iTimes = 0;
SYSTEMTIME st;
GetLocalTime(&st);
strDestPath.Format(_T("%s\\%04d%02d%02d%02d%02d%02d.log"), strDestPath, st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
do
{
bRes = CopyFile(strSDRecordFile, strDestPath, TRUE);
if (false == bRes)
{
CFileOperTools::GetInstance()->WriteComLog(_T("CGD10OperCmd::LoadDevMarkDataFormGDThread() CopyFile record.log file failed!"));
Sleep(5000);
}
iTimes++;
} while (!bRes && (iTimes <= 3));
if (bRes == false && iTimes > 3)
{
CFileOperTools::GetInstance()->WriteComLog(_T("CGD10OperCmd::LoadDevMarkDataFormGDThread() Failed to copy the record.log file!"));
return bRes;
}
iTimes = 0;
do
{
bRes = DeleteFile(strSDRecordFile);
//bRes = CFileOperTools::GetInstance()->DeleteDirectory(strSDRecordFile);
if (false == bRes)
{
CFileOperTools::GetInstance()->WriteComLog(_T("CGD10OperCmd::LoadDevMarkDataFormGDThread() delete GD dev record.log file failed!"));
Sleep(5000);
}
iTimes++;
} while (!bRes && (iTimes <= 3));
if (bRes == false && iTimes > 3)
{
CFileOperTools::GetInstance()->WriteComLog(_T("CGD10OperCmd::LoadDevMarkDataFormGDThread() Failed to delete the record.log file!"));
}
return bRes;
}
//从GD获取设备市场数据
bool CGD10OperCmd::loadDeviceMarkDataFromGD()
{
HANDLE hThread = ::CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)LoadDevMarkDataFormGDThread, NULL, 0, 0);
if (INVALID_HANDLE_VALUE == hThread)
{
CFileOperTools::GetInstance()->WriteComLog(_T("Create Thread failed to upload device market data to Cloud"));
return false;
}
CloseHandle(hThread);
return true;
}