⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dominomessage.cpp

📁 基于domino系统邮件数据库编写的邮件助手程序
💻 CPP
字号:
// DominoMessage.cpp: implementation of the CDominoMessage class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "DominoMinder.h"
#include "DominoMessage.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

inline int getIndex( CString* rgstr, CString str, int nCnt )
{
	for ( int i=0; i<nCnt; i++ ) {
		if ( rgstr[i] == str )
			return i;
	}
	return -1;
}

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CDominoMessage* CDominoMessage::m_pDominoMsg = NULL;

CDominoMessage* CDominoMessage::GetInstance()
{
	if ( m_pDominoMsg == NULL ) {
		m_pDominoMsg = new CDominoMessage();
		//m_pDominoMsg->m_rgpDominoHandler[0] = new CDominoHandler( "sxsw", "test", "password" );	//for test
	}
	return m_pDominoMsg;
}

CDominoMessage::CDominoMessage()
{
	//初始化
	for ( int i=0; i<MAX_DOMINOHANDLER; i++ ) {
		m_rgpDominoHandler[i] = NULL;
	}
	m_strMsg = "";
	m_strMsgHistory = "";
	m_strMsgSimple = "";
}

CDominoMessage::~CDominoMessage(){}

//服务器数
int CDominoMessage::GetCount()
{
	int nCnt = 0;
	for ( int i=0; i<MAX_DOMINOHANDLER; i++ ) {
		if ( m_rgpDominoHandler[i] != NULL ) {
			nCnt ++;
		}
	}
	return nCnt;
}

//获得历史消息
CString CDominoMessage::GetMsgHistory()
{
	return m_strMsgHistory;
}

//根据计时器提交请求,并等待、获得返回结果
CString CDominoMessage::GetMsg()
{
	//“·来自”服务器
	CString sHeader;
	sHeader.LoadString(IDS_STRING_MSGFROM_HEADER);

	m_strMsg = "";
	for ( int i=0; i<MAX_DOMINOHANDLER; i++ ) {
		if ( m_rgpDominoHandler[i] != NULL ) {
			CString sMsg = m_rgpDominoHandler[i]->GetServiceMsg();
			if ( sMsg != "" ) {
				m_strMsg += "\r\n" + sHeader + m_rgpDominoHandler[i]->GetServerName() + "\r\n\r\n" + sMsg;
			}
		}
	}

	//save msg to history - add time stamp
	if ( m_strMsg != "" ) {
		char sTime[30];
		time_t t;
		time(&t);
		tm* tmNow = localtime(&t);
		sprintf(sTime, "[ %04d-%02d-%02d, %02d:%02d ]\0", 
			tmNow->tm_year+1900, tmNow->tm_mon+1, tmNow->tm_mday,
			tmNow->tm_hour, tmNow->tm_min);
		m_strMsgLastTime = sTime;
		if ( m_strMsgHistory == "" ) {
			m_strMsgHistory += m_strMsgLastTime + "\r\n" + m_strMsg;
		} else {
			m_strMsgHistory += "---------------------------------------------------------------\r\n"
							+  m_strMsgLastTime + "\r\n" + m_strMsg;
		}
	}
	return m_strMsg;
}
//返回简版消息(用于托盘栏气球消息)
CString CDominoMessage::GetMsgSimple()
{
	//“·来自”服务器
	CString sHeader;
	sHeader.LoadString(IDS_STRING_MSGFROM_HEADER);

	m_strMsgSimple = "";
	for ( int i=0; i<MAX_DOMINOHANDLER; i++ ) {
		if ( m_rgpDominoHandler[i] != NULL ) {
			//MessageBox( NULL, m_rgpDominoHandler[i]->GetServerName(), "", MB_OK );
			CString strMsgSimple = m_rgpDominoHandler[i]->GetServiceMsgSimple();
			if ( strMsgSimple != "" ) {
				m_strMsgSimple += "\r\n" + sHeader + m_rgpDominoHandler[i]->GetServerName() + "\r\n" + strMsgSimple;
			}
		}
	}
	if ( m_strMsgSimple != "" ) {
		m_strMsgSimple = m_strMsgLastTime + m_strMsgSimple;
	}
	return m_strMsgSimple;
}

//从服务器数组中查询
//	@bAdd:如果没有找到则增加此服务器到列表
int CDominoMessage::getServerIndex( CString in_strServerName, bool bAdd )
{
	CString strServerName;
	strServerName = in_strServerName;
	//拼完整服务器名
	int nIdx = strServerName.Find(":");
	if (  nIdx == -1 ) {
		strServerName.Format( "%s:%d", strServerName, INTERNET_DEFAULT_HTTP_PORT);
		//strServerName += ":";
		//strServerName += INTERNET_DEFAULT_HTTP_PORT;
	}
	//查询
	for ( int i=0; i<MAX_DOMINOHANDLER; i++ ) {
		if ( (m_rgpDominoHandler[i]!=NULL) && (m_rgpDominoHandler[i]->GetServerName() == strServerName) ) {
			return i;
		}
	}
	//需要的话添加到列表
	if ( bAdd ) {
		if ( AddServer(strServerName) )
			return getServerIndex( strServerName );
	}
	return -1;
}

//增加服务器
bool CDominoMessage::AddServer( CString strServerName )
{
	CConfig *pCfg = CConfig::GetInstance();
	for ( int i=0; i<MAX_DOMINOHANDLER; i++ ) {
		if ( m_rgpDominoHandler[i] == NULL ) {
			m_rgpDominoHandler[i] = new CDominoHandler( pCfg->GetVersion(), strServerName, pCfg->GetUserName(), pCfg->GetPassword() );
			return true;
		}
	}
	return false;
}
//删除服务
bool CDominoMessage::DelServer( CString strServerName )
{
	int i = getServerIndex( strServerName );
	if ( i != -1 ) {
		delete m_rgpDominoHandler[i];
		m_rgpDominoHandler[i] = NULL;
	}
	return true;
}

//从服务器获取服务配置
CString CDominoMessage::GetServiceCfg( CString strServerName )
{
	int i = getServerIndex( strServerName );
	if ( i != -1 ) {
		return m_rgpDominoHandler[i]->GetServiceCfg();
	} else {
		return "";
	}
}
int CDominoMessage::GetServiceCnt( CString strServerName )
{
	int i = getServerIndex( strServerName );
	if ( i != -1 ) {
		return m_rgpDominoHandler[i]->GetServiceCnt();
	} else {
		return -1;
	}
}

//登录服务器,并获取其配置
CString CDominoMessage::Login( CString strServerName )
{
	CString strResult = "";
	CConfig* pCfg = CConfig::GetInstance();

	//登陆所有服务器 - 用户运行程序,登录时调用
	if ( strServerName == "" ) {
		for ( int i=0; i<MAX_DOMINOHANDLER; i++ ) {
			if ( m_rgpDominoHandler[i] != NULL ) {
				if ( !m_rgpDominoHandler[i]->Login( pCfg->GetUserName(), pCfg->GetPassword() ) ) {
					strResult += m_rgpDominoHandler[i]->GetServerName() + "\n";
				} else {
					m_rgpDominoHandler[i]->GetServiceCfg();
				}
			}
		}
	} else {
	//登陆单个服务器
		int i = getServerIndex( strServerName, true );
		if ( !m_rgpDominoHandler[i]->Login( pCfg->GetUserName(), pCfg->GetPassword() ) ) {
			strResult += m_rgpDominoHandler[i]->GetServerName() + "\n";
		} else {
			m_rgpDominoHandler[i]->GetServiceCfg();
		}
	}
	//拼返回结果错误结果
	if ( strResult != "" ) {
		char sz[51]; memset(sz,0,sizeof(sz));
		LoadString( NULL, IDS_LOGIN_FAIL, sz, 50 );
		sprintf( sz,"%s\n\0", sz );
		strResult = sz + strResult;
	}
	return strResult;
}
//注销登录服务器
void CDominoMessage::Logout( CString strServerName )
{
	//注销所有服务器
	if ( strServerName == "" ) {
		for ( int i=0; i<MAX_DOMINOHANDLER; i++ ) {
			if ( m_rgpDominoHandler[i] != NULL ) {
				m_rgpDominoHandler[i]->Logout();
			}
		}
	} else {
	//注销单个服务器
		int i = getServerIndex( strServerName, true );
		m_rgpDominoHandler[i]->Logout();
	}
}


//从队列中装载服务配置并显示(类似于CConfig中的同名函数)
//Called by CConfig::LoadConfigServer
void CDominoMessage::LoadConfigServer( CDialog* pDlg, CString strServerName )
{
	//装载服务器列表
	if ( strServerName == "" ) {
		CComboBox* pCombSeverList = (CComboBox*) pDlg->GetDlgItem(IDC_COMBO_SERVER_LIST);
		pCombSeverList->ResetContent();

		for ( int i=0; i<MAX_DOMINOHANDLER; i++ ) {
			if ( m_rgpDominoHandler[i] != NULL ) {
				pCombSeverList->AddString(m_rgpDominoHandler[i]->GetServerName());
			}
		}
	}
	//装载单个服务器的服务列表
	else {
		CListBox* pListEnabled  = (CListBox*) pDlg->GetDlgItem( IDC_LIST_SERVICE_ENABLED  );
		CListBox* pListDisabled = (CListBox*) pDlg->GetDlgItem( IDC_LIST_SERVICE_DISABLED );
		pListEnabled->ResetContent();
		pListDisabled->ResetContent();

		int idx = getServerIndex( strServerName, false );
		if ( idx == -1 ) return;

		CString* rgstrServiceEnabled  = m_rgpDominoHandler[idx]->GetServiceEnabled();
		CString* rgstrServiceDisabled = m_rgpDominoHandler[idx]->GetServiceDisabled();

		for ( int i=0; i<MAX_DOMINO_SERVICE; i++ ) {
			if ( rgstrServiceEnabled[i] != "" )
				pListEnabled->AddString(rgstrServiceEnabled[i]);
			if ( rgstrServiceDisabled[i] != "" )
				pListDisabled->AddString(rgstrServiceDisabled[i]);
		}
	}
}

//从服务配置Dialog保存服务器到队列
//Called by CConfig::SaveConfigServer
void CDominoMessage::SaveConfigServer( CDialog *pDlg )
{
	CComboBox* pCombSeverList = (CComboBox*) pDlg->GetDlgItem(IDC_COMBO_SERVER_LIST);
	int nServerCnt = pCombSeverList->GetCount();
	//删除服务器
	for ( int i=0; i<MAX_DOMINOHANDLER; i++ ) {
		if ( this->m_rgpDominoHandler[i] == NULL ) continue;

		for ( int j=0; j<nServerCnt; j++ ) {
			CString strSrvName;
			pCombSeverList->GetLBText(j, strSrvName );
			if ( strSrvName == this->m_rgpDominoHandler[i]->GetServerName() ) {
				break;
			}
		}
		if ( j == nServerCnt ) {
			this->DelServer( this->m_rgpDominoHandler[i]->GetServerName() );
		}
	}

	//整理当前选择的服务器的服务
	if ( pCombSeverList->GetCurSel() != -1 ) {
		//计算当前服务器名
		CString strServerCur;
		pCombSeverList->GetLBText( pCombSeverList->GetCurSel(), strServerCur );
		//计算当前服务器句柄
		int idx = getServerIndex( strServerCur, false );
		if ( idx == -1 ) return;
		CDominoHandler* pDominoHandler = m_rgpDominoHandler[idx];
		//重置DominoMsg队列中的服务列表
		pDominoHandler->ClearService();
		//计算启用服务配置
		CString strService;
		CListBox* pListEnabled  = (CListBox*) pDlg->GetDlgItem( IDC_LIST_SERVICE_ENABLED  );
		int nCntEnabled = pListEnabled->GetCount();
		for ( i=0; i<nCntEnabled; i++ ) {
			pListEnabled->GetText( i, strService );
			pDominoHandler->AddService( strService, true );
		}
		//计算禁用的服务配置
		CListBox* pListDisabled = (CListBox*) pDlg->GetDlgItem( IDC_LIST_SERVICE_DISABLED );
		int nCntDisabled = pListDisabled->GetCount();
		for ( i=0; i<nCntDisabled; i++ ) {
			pListDisabled->GetText( i, strService );
			pDominoHandler->AddService( strService, false );
		}
		//计算服务总数
		//pDominoHandler->SetServiceCnt( nCntEnabled + nCntDisabled );
	}
	
}

//添加服务到服务器handler
bool CDominoMessage::AddServiceToServer( CString strServerName, CString strServiceName, bool bEnabled )
{
	int i = getServerIndex( strServerName, false );
	if ( i == -1 ) return false;
	return m_rgpDominoHandler[i]->AddService( strServiceName, bEnabled );
}

//清空单一服务器的服务
bool CDominoMessage::ClearService( CString strServerName )
{
	int i = getServerIndex( strServerName, false );
	if ( i == -1 ) return false;
	return m_rgpDominoHandler[i]->ClearService();
}

//获得服务器的服务列表
CString* CDominoMessage::GetServiceList( CString strServerName, bool bEnabled )
{
		int idx = getServerIndex( strServerName, false );
		if ( idx == -1 ) return NULL;

		if ( bEnabled ) {
			return m_rgpDominoHandler[idx]->GetServiceEnabled();
		} else {
			return m_rgpDominoHandler[idx]->GetServiceDisabled();
		}
}
//清空服务请求计数器
void CDominoMessage::ResetRequest()
{
	for ( int i=0; i<MAX_DOMINOHANDLER; i++ ) {
		if ( m_rgpDominoHandler[i] != NULL ) {
			m_rgpDominoHandler[i]->ResetRequest();
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -