📄 dominomessage.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 + -