📄 config.cpp
字号:
// Config.cpp: implementation of the CConfig class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "DominoMinder.h"
#include "Config.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CConfig* CConfig::m_pCfg = NULL;
CConfig::CConfig()
{
//初始化用户名和密码
m_strUserName = "";
m_strPassword = "";
//根node名
char sz[MAX_PATH];
::LoadString(NULL, IDS_APP_NAME, sz, MAX_PATH);
m_strProfileName.Format( "%s", sz );
//配置文档路径
::GetCurrentDirectory( MAX_PATH, sz );
m_strFilePath.Format( "%s", sz );
m_strFilePath += "\\" + m_strProfileName + ".xml";
//装载配置文档
loadFile();
//取客户端文件版本
char sPath[MAX_PATH];
GetModuleFileName(NULL,sPath,sizeof(sPath));
CFileVersion fv;
fv.Open((LPTSTR)sPath);
CString sFileVer=fv.GetFileVersion();
fv.Close();
CString sFileVerN = sFileVer.Left ( sFileVer.Find(',') );
CString sFileVerF = sFileVer.Right( sFileVer.GetLength() - sFileVer.Find(',') );
sFileVerF.Replace(", ","");
m_strFileVersion = sFileVerN + "." + sFileVerF;
//
m_nCheckServiceInterval = 30;
}
CConfig::~CConfig()
{
saveFile();
}
//取客户端版本
CString CConfig::GetVersion()
{
return m_strFileVersion;
}
//装载配置文档
void CConfig::loadFile()
{
m_pXMLProfile = new CXMLProfile( m_strProfileName, m_strFilePath );
m_pXMLProfile->loadProfile();
//TODO: 修改CXMLProfile支持简单的XPath
//m_pXMLProfile->writeProfileString("ee", "dd", "短短的");
}
//保存配置文档
void CConfig::saveFile()
{
if ( m_pXMLProfile != NULL ) {
m_pXMLProfile->saveProfile();
}
}
//获得配置对象实例
CConfig* CConfig::GetInstance()
{
if ( m_pCfg == NULL ) {
m_pCfg = new CConfig();
}
return m_pCfg;
}
//////////////////////////////////////////////////////////////////////
//用户登陆信息
//////////////////////////////////////////////////////////////////////
void CConfig::LoadLoginUserInfo( CDialog* pDlg )
{
if ( m_strUserName != "" ) {
pDlg->SetDlgItemText( IDC_EDIT_USERNAME, m_strUserName );
pDlg->SetDlgItemText( IDC_EDIT_PASSWORD, m_strPassword );
} else {
//从XMLProfile文档里装载
char sz[200]; memset( sz, 0, sizeof(sz) );
m_pXMLProfile->getProfileString( "user", "name", "", sz, 200 );
pDlg->SetDlgItemText( IDC_EDIT_USERNAME, sz );
//给成员变量赋值
m_strUserName = sz;
m_strPassword = "";
}
}
void CConfig::SaveLoginUserInfo( CDialog* pDlg )
{
//MessageBox( NULL, "save", "", MB_OK );
//给成员变量赋值
pDlg->GetDlgItemText( IDC_EDIT_USERNAME, m_strUserName );
pDlg->GetDlgItemText( IDC_EDIT_PASSWORD, m_strPassword );
//保存到XMLProfile文档里
m_pXMLProfile->writeProfileString( "user", "name", m_strUserName );
m_pXMLProfile->saveProfile();
}
CString CConfig::GetUserName()
{
return m_strUserName;
}
CString CConfig::GetPassword()
{
return m_strPassword;
}
//////////////////////////////////////////////////////////////////////
//用户基本配置-消息显示模式
//////////////////////////////////////////////////////////////////////
int CConfig::GetShowMode()
{
int nRet = 0;
if ( m_pXMLProfile->getProfileInt( "user", "notice_visual", 1 ) == 1 ) {
nRet = nRet | SHOW_MODE_VISUAL;
}
if ( m_pXMLProfile->getProfileInt( "user", "notice_trayballoon", 1 ) == 1 ) {
nRet = nRet | SHOW_MODE_TRAYBALLOON;
}
char sz[MAX_PATH]; memset(sz,0,sizeof(sz));
m_pXMLProfile->getProfileString("user", "notice_acoustical_file", "", sz, MAX_PATH);
if ( (m_pXMLProfile->getProfileInt( "user", "notice_acoustical", 0 ) == 1) && (strlen(sz) > 5) ) {
nRet = nRet | SHOW_MODE_ACOUSTICAL;
}
return nRet;
}
CString CConfig::GetWavFile()
{
char sz[MAX_PATH]; memset(sz,0,sizeof(sz));
m_pXMLProfile->getProfileString("user", "notice_acoustical_file", "", sz, MAX_PATH);
CString sRet = sz;
return sRet;
}
int CConfig::GetCheckServiceInterval()
{
return m_nCheckServiceInterval;
}
void CConfig::LoadConfigUser( CDialog* pDlg )
{
if ( pDlg->m_hWnd == NULL ) return;
char sz[MAX_PATH]; memset(sz,0,sizeof(sz));
pDlg->SetDlgItemText( IDC_EDIT_WAVFILE, m_pXMLProfile->getProfileString("user", "notice_acoustical_file", "", sz, MAX_PATH) );
pDlg->CheckDlgButton( IDC_CHECK_VISUAL, m_pXMLProfile->getProfileInt( "user", "notice_visual", 1 ) );
pDlg->CheckDlgButton( IDC_CHECK_TRAY_BALLOONTIP, m_pXMLProfile->getProfileInt( "user", "notice_trayballoon", 1 ) );
pDlg->CheckDlgButton( IDC_CHECK_ACOUSTICAL, m_pXMLProfile->getProfileInt( "user", "notice_acoustical", 0 ) );
//检查服务的时间间隔
CSpinButtonCtrl *pSpinCtrl=(CSpinButtonCtrl*) pDlg->GetDlgItem(IDC_SPIN_CHECKSRV_INTERVAL);
pSpinCtrl->SetPos( m_pXMLProfile->getProfileInt("user", "notice_interval", DEF_CHECK_SERVICE_INTERVAL) );
//pDlg->SetDlgItemInt ( IDC_EDIT_CHECKSRV_INTERVAL, m_pXMLProfile->getProfileInt("user", "notice_interval", MIN_CHECK_SERVICE_INTERVAL) );
m_nCheckServiceInterval = m_pXMLProfile->getProfileInt( "user", "notice_interval", DEF_CHECK_SERVICE_INTERVAL );
}
void CConfig::SaveConfigUser( CDialog* pDlg )
{
//时间间隔
int nInterval = pDlg->GetDlgItemInt( IDC_EDIT_CHECKSRV_INTERVAL );
if ( nInterval > MAX_CHECK_SERVICE_INTERVAL )
nInterval = MAX_CHECK_SERVICE_INTERVAL;
if ( nInterval < MIN_CHECK_SERVICE_INTERVAL )
nInterval = MIN_CHECK_SERVICE_INTERVAL;
m_nCheckServiceInterval = nInterval;
m_pXMLProfile->writeProfileInt("user", "notice_interval", nInterval );
//视觉提示-窗口
m_pXMLProfile->writeProfileInt( "user", "notice_visual", pDlg->IsDlgButtonChecked(IDC_CHECK_VISUAL) );
//视觉提示-托盘气球文字
m_pXMLProfile->writeProfileInt( "user", "notice_trayballoon", pDlg->IsDlgButtonChecked(IDC_CHECK_TRAY_BALLOONTIP) );
//声音提示
m_pXMLProfile->writeProfileInt( "user", "notice_acoustical", pDlg->IsDlgButtonChecked(IDC_CHECK_ACOUSTICAL) );
//声音提示wav文件名
char szPath[MAX_PATH];
pDlg->GetDlgItemText( IDC_EDIT_WAVFILE, szPath, MAX_PATH );
m_pXMLProfile->writeProfileString( "user", "notice_acoustical_file", szPath );
//保存
m_pXMLProfile->saveProfile();
}
//////////////////////////////////////////////////////////////////////
//服务配置
//////////////////////////////////////////////////////////////////////
//装载服务配置到配置窗口 和 DominoMessage队列
//TODO: 装载策略可以优化(DominoMinderDlg2.cpp-OnShowWindow->LoadConfig->.)
void CConfig::LoadConfigServer( CDialog* pDlg, CString strServerName )
{
//可以的话,直接从DominoMsg队列中装载
CDominoMessage* pDominoMsg = CDominoMessage::GetInstance();
if ( pDominoMsg->GetCount() > 0 ) {
pDominoMsg->LoadConfigServer( pDlg, strServerName );
return;
}
char szTxt[101];
char szSec[101];
char szServiceSec[101];
CComboBox* pCombSeverList = (pDlg->m_hWnd==NULL) ? NULL : (CComboBox*) pDlg->GetDlgItem(IDC_COMBO_SERVER_LIST);
int nSrvCnt = m_pXMLProfile->getProfileInt( "server", "count", 0 );
//从配置文档装载所有服务器名
if ( strServerName == "" ) {
//添加到服务配置Dialog
if ( pCombSeverList != NULL ) {
pCombSeverList->ResetContent();
for ( int i=0; i<nSrvCnt; i++ ) {
sprintf( szSec, "server/server_%d\0", i );
memset( szTxt, 0, sizeof(szTxt) );
m_pXMLProfile->getProfileString( szSec, "host", "", szTxt, 100 );
pCombSeverList->AddString(szTxt);
}
}
//添加服务到DominoMsg队列
CString strSrvName;
for ( int i=0; i<nSrvCnt; i++ ) {
//添加服务器
sprintf( szSec, "server/server_%d\0", i );
memset( szTxt, 0, sizeof(szTxt) );
m_pXMLProfile->getProfileString( szSec, "host", "", szTxt, 100 );
pDominoMsg->AddServer( szTxt );
strSrvName = szTxt;
//pCombSeverList->GetLBText( i, strSrvName );
//pDominoMsg->AddServer( strSrvName );
//添加服务
int nServiceCnt = m_pXMLProfile->getProfileInt( szSec, "count", 0 );
sprintf( szSec, "%s/service_\0", szSec );
for ( int j=0; j<nServiceCnt; j++ ) {
memset( szTxt,0,sizeof(szTxt) );
sprintf( szServiceSec, "%s%d\0", szSec, j );
m_pXMLProfile->getProfileString( szServiceSec, "name", "", szTxt, 100 );
if ( m_pXMLProfile->getProfileInt(szServiceSec,"enabled",0) == 1 ) {
pDominoMsg->AddServiceToServer( strSrvName, szTxt, true );
} else {
pDominoMsg->AddServiceToServer( strSrvName, szTxt, false );
}
}
}
}
//从配置文档装载某一服务器的服务配置 到 服务配置Dialog
else {
for ( int i=0; i<nSrvCnt; i++ ) {
sprintf( szSec, "server/server_%d\0", i );
memset( szTxt, 0, sizeof(szTxt) );
m_pXMLProfile->getProfileString( szSec, "host", "", szTxt, 100 );
if ( strServerName == szTxt ) break;
}
int nServiceCnt = m_pXMLProfile->getProfileInt( szSec, "count", 0 );
sprintf( szSec, "%s/service_\0", szSec );
//
CListBox* pListEnabled = (CListBox*) pDlg->GetDlgItem( IDC_LIST_SERVICE_ENABLED );
CListBox* pListDisabled = (CListBox*) pDlg->GetDlgItem( IDC_LIST_SERVICE_DISABLED );
pListEnabled->ResetContent();
pListDisabled->ResetContent();
for ( i=0; i<nServiceCnt; i++ ) {
memset( szTxt,0,sizeof(szTxt) );
sprintf( szServiceSec, "%s%d\0", szSec, i );
m_pXMLProfile->getProfileString( szServiceSec, "name", "", szTxt, 100 );
if ( m_pXMLProfile->getProfileInt(szServiceSec,"enabled",0) == 1 ) {
pListEnabled->AddString(szTxt);
} else {
pListDisabled->AddString(szTxt);
}
}
}
//TODO: 从服务器更新配置(暂不做,需要更新时先删除服务器)
}
void CConfig::SaveConfigServer( CDialog* pDlg )
{
//保存服务器到DominoMsg队列先
CDominoMessage* pDominoMsg = CDominoMessage::GetInstance();
pDominoMsg->SaveConfigServer( pDlg );
//保存服务器到XML配置文档
char szTxt[101];
char szSec[101];
char szServiceSec[101];
CComboBox* pCombSeverList = (CComboBox*) pDlg->GetDlgItem(IDC_COMBO_SERVER_LIST);
//删除原服务器配置
int nServerCntOld = m_pXMLProfile->getProfileInt( "server", "count", 0 );
for ( int i=0; i<nServerCntOld; i++ ) {
sprintf( szSec, "server_%d\0", i );
m_pXMLProfile->deleteProfileEntry( "server", szSec );
}
//服务器数目
int nServerCnt = pCombSeverList->GetCount();
m_pXMLProfile->writeProfileInt( "server", "count", nServerCnt );
//保存所有服务器 server/server_n/*
for ( i=0; i<nServerCnt; i++ ) {
//服务器
pCombSeverList->GetLBText(i,szTxt);
sprintf( szSec, "server/server_%d\0", i );
m_pXMLProfile->writeProfileString( szSec, "host", szTxt);
//服务
m_pXMLProfile->writeProfileInt( szSec, "count", pDominoMsg->GetServiceCnt(szTxt) );
CString* rgstrServiceEnabled = pDominoMsg->GetServiceList( szTxt, true );
CString* rgstrServiceDisabled = pDominoMsg->GetServiceList( szTxt, false );
int nCnt = 0;
for ( int j=0; j<MAX_DOMINO_SERVICE; j++ ) {
if ( rgstrServiceEnabled[j] != "" ) {
sprintf( szServiceSec, "%s/service_%d\0", szSec, nCnt );
m_pXMLProfile->writeProfileString( szServiceSec, "name", rgstrServiceEnabled[j] );
m_pXMLProfile->writeProfileString( szServiceSec, "enabled", "1" );
nCnt ++;
}
}
for ( j=0; j<MAX_DOMINO_SERVICE; j++ ) {
if ( rgstrServiceDisabled[j] != "" ) {
sprintf( szServiceSec, "%s/service_%d\0", szSec, nCnt );
m_pXMLProfile->writeProfileString( szServiceSec, "name", rgstrServiceDisabled[j] );
m_pXMLProfile->writeProfileString( szServiceSec, "enabled", "0" );
nCnt ++;
}
}
}
//保存配置文档
m_pXMLProfile->saveProfile();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -