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

📄 deliverthread.cpp

📁 一个用vc开发的Sgip通讯程序
💻 CPP
📖 第 1 页 / 共 4 页
字号:
		return TRUE ;

	for( i = 0 ; i < m_nValidMbCount ; i++ )
	{
		if( ( m_psValidMb[ i ].strStart <= strMobile ) && 
			( strMobile <= m_psValidMb[ i ].strEnd ) )
			return TRUE ;
	}

	if(m_nValidMbCount == 0) 
		return TRUE ;

	return FALSE ;
}

void CDeliverThread::LoadMobile() 
{//add by ssiyong for loading valid mobile Number 

	LoadScrapMobile() ;//载入离散零星号码表(包括有效和无效两种)

	if(m_bMbCtrlFlag)//载入连续号码控制表
	{//1,载入号码区间段(11位数)
		LoadConsecutiveMobile() ;//(包括有效和无效两种)
	}
	else{//载入号码段头表(包括有效和无效两种)
		LoadMobileHead() ;
	}
}
BOOL CDeliverThread::LoadMobileHead()
{ 
	CSqlExec sql_get(&m_database) ;
    CString  strSql;
	int		row, iRecCount;
    //.....................................................
    //以下是:载入有效号码段头到m_saValidMobileHead
	strSql.Format("select startMb from gr_mobile_ctrl where ctrlType=1 and validState=1 order by startMb asc");
	sql_get.SetSqlStatement( strSql );
	if( !sql_get.Open() )
	{
		CString strTmp ;
		strTmp.Format("查询数据库失败,SQL语句是:%s",strSql) ;
		LogFile(strTmp) ;
		return FALSE;
	}

	sql_get.FetchAllData();
	iRecCount = sql_get.RowCount();
	
	m_saValidMbHead.RemoveAll() ;
	for(row=0 ; row < iRecCount ; row++ )
	{
		m_saValidMbHead.Add(TrimStr(sql_get.GetFieldValue(row,"startMb")));
	}
    //以上是:载入有效号码段头到m_saValidMobileHead
    //.....................................................
    //-------------------------------------------------
    //以下是:载入无效号码段头到m_saInvdMbHead
	strSql.Format("select startMb from gr_mobile_ctrl where ctrlType=1 and validState=0 order by startMb asc");
	sql_get.SetSqlStatement( strSql );
	if( !sql_get.Open() )
	{
		CString strTmp ;
		strTmp.Format("查询数据库失败,SQL语句是:%s",strSql) ;
		LogFile(strTmp) ;
		return FALSE;
	}

	sql_get.FetchAllData();
	iRecCount = sql_get.RowCount();
	
	m_saInvdMbHead.RemoveAll() ;
	for(row=0 ; row < iRecCount ; row++ )
	{
		m_saInvdMbHead.Add(TrimStr(sql_get.GetFieldValue(row,"startMb")));
	}

	return TRUE ;
}

BOOL CDeliverThread::LoadConsecutiveMobile()
{//表空时,返回false ; //
    CSqlExec sql_get(&m_database) ;
    CString  strSql;
	int		row;
    //.....................................................
    //以下是:载入无效号码段到m_psInvalidMobile
	strSql.Format("select startMb,endMb from gr_mobile_ctrl where ctrlType=1 and validState=0  order by startMb asc ,endMb desc");
	sql_get.SetSqlStatement( strSql );
	if( !sql_get.Open() )
	{
		CString strTmp ;
		strTmp.Format("查询数据库失败,SQL语句是:%s",strSql) ;
		LogFile(strTmp) ;
		return FALSE;
	}

	sql_get.FetchAllData();
	m_nInvalidMbCount = sql_get.RowCount();//无效号码段个数,号码段位数为11
	if(m_nInvalidMbCount > 0)
	{
		if(m_psInvalidMb != NULL )//无效号码段,号码段位数为11
		{
			delete [] m_psInvalidMb ;
			m_psInvalidMb = NULL;
		}

		m_psInvalidMb = new SMobileCtrl[ m_nInvalidMbCount ];
		for(row=0 ; row < m_nInvalidMbCount ; row++ )
		{
			m_psInvalidMb[row].strStart = TrimStr(sql_get.GetFieldValue(row,"startMb"));
			m_psInvalidMb[row].strEnd = TrimStr(sql_get.GetFieldValue(row,"endMb"));
		}
	}
    //---------------------------------
    //以下是:有效号码段到m_psValidMb
	strSql.Format("select startMb,endMb from gr_mobile_ctrl where ctrlType=1 and validState=1 order by startMb asc ,endMb desc");
	sql_get.SetSqlStatement( strSql );
	if( !sql_get.Open() )
	{
		CString strTmp ;
		strTmp.Format("查询数据库失败,SQL语句是:%s",strSql) ;
		LogFile(strTmp) ;
		return FALSE;
	}

	sql_get.FetchAllData();
	m_nValidMbCount = sql_get.RowCount();////有效号码段个数,号码段位数为11
	if(m_nValidMbCount > 0)
	{
		if(m_psValidMb != NULL )//有效号码段,号码段位数为11
		{
			delete [] m_psValidMb ;
			m_psValidMb = NULL;
		}

		m_psValidMb = new SMobileCtrl[ m_nValidMbCount ];
		for(row=0 ; row < m_nValidMbCount ; row++ )
		{
			m_psValidMb[row].strStart = TrimStr(sql_get.GetFieldValue(row,"startMb"));
			m_psValidMb[row].strEnd = TrimStr(sql_get.GetFieldValue(row,"endMb"));
		}
	}

	return TRUE ;
}

BOOL CDeliverThread::LoadScrapMobile()
{//表空时,返回false ; //
    CSqlExec sql_get(&m_database) ;
    CString  strSql;
	int		row;
    //---------------------------------
    //以下是:载入有效离散零星号码段到m_psValidScrapMb
	strSql.Format("select startMb from gr_mobile_ctrl where ctrlType=0 and validState=1 order by startMb asc");
	sql_get.SetSqlStatement( strSql );
	if( !sql_get.Open() )
	{
		CString strTmp ;
		strTmp.Format("查询数据库失败,SQL语句是:%s",strSql) ;
		LogFile(strTmp) ;
		return FALSE;
	}

	sql_get.FetchAllData();
	m_nValidScrapMbCount = sql_get.RowCount();////有效号码段个数,号码段位数为11
	
	if(m_nValidScrapMbCount > 0) 
	{
		if(m_psValidScrapMb != NULL )///离散零星号码段,号码段位数为11
		{
			delete [] m_psValidScrapMb ;
			m_psValidScrapMb = NULL;
		}

		m_psValidScrapMb = new SMobileCtrl[ m_nValidScrapMbCount ];
		for(row=0 ; row < m_nValidScrapMbCount ; row++ )
		{
			m_psValidScrapMb[row].strStart = TrimStr(sql_get.GetFieldValue(row,"startMb"));
		}
        //以上是:载入有效离散零星号码段到m_psValidScrapMb
        //---------------------------------
	}
    //.....................................................
    //以下是:载入无效离散零星号码段到m_psValidScrapMb
	strSql.Format("select startMb from gr_mobile_ctrl where ctrlType=0 and validState=0 order by startMb asc");
	sql_get.SetSqlStatement( strSql );
	if( !sql_get.Open() )
	{
		CString strTmp ;
		strTmp.Format("查询数据库失败,SQL语句是:%s",strSql) ;
		LogFile(strTmp) ;
		return FALSE;
	}

	sql_get.FetchAllData();
	m_nInvdScrapMbCount = sql_get.RowCount();////有效号码段个数,号码段位数为11
	
	if(m_nInvdScrapMbCount > 0)
	{
		if(m_psInvdScrapMb != NULL )///离散零星号码段,号码段位数为11
		{
			delete [] m_psInvdScrapMb ;
			m_psInvdScrapMb = NULL;
		}

		m_psInvdScrapMb = new SMobileCtrl[ m_nInvdScrapMbCount ];
		for(row=0 ; row < m_nInvdScrapMbCount ; row++ )
		{
			m_psInvdScrapMb[row].strStart = TrimStr(sql_get.GetFieldValue(row,"startMb"));
		}
	}
	return TRUE ;
}


void CDeliverThread::GetMoTabName(CString strMsg, CString &strMoTab, const char * szDestAddr) 
{ 
    CString strCmd ,strSender, strDestAddr,_strDestAddr; 
    int i; 

    strCmd = TrimStr(strMsg);
	strCmd.MakeUpper();

    _strDestAddr = TrimStr(szDestAddr); 
	if (_strDestAddr.Find(m_szSPNumber) > 1)
	{
		if(_strDestAddr.Find("86") == 0)
		    strDestAddr = _strDestAddr.Right(_strDestAddr.GetLength()-2);
		else
            strDestAddr = _strDestAddr;
	}
	else
		strDestAddr = _strDestAddr;

    strMoTab.Empty() ; 

    for(i = 0; i< m_nNumOfGameCmd ; i++ ) { 
        strSender = TrimStr(m_astCmdTab[i].strSender); 

       if(m_astCmdTab[i].iSenderType == 1)  { //根据接入号精确匹配
            if((strDestAddr.CompareNoCase(strSender) == 0) 
                 && (IsFindedMoTable(i, strCmd,strMoTab))) 
               break ; 
	   } 
       else { //根据接入号模糊匹配
//-- add by gyh 2003.8.1
		   if( ( strDestAddr.Find("81288") == 0 ) && ( strDestAddr.GetLength()==10 ) ){//倾城之恋的会员
			   strMoTab.Format( "%s",m_szChatTable ) ;
			   break ; 
		   }
//-- add by gyh 2003.8.1
		   if((strDestAddr.Find(strSender) == 0) 
              && (IsFindedMoTable(i,strCmd,strMoTab))) 
              break ; 
	   }
	} 
    
	if((!strMoTab.IsEmpty()) && (m_astCmdTab[i].iMoTabNum > 1)) { 
        CString strTmp; 
        int iRandom = rand(); 

        iRandom = iRandom % m_astCmdTab[i].iMoTabNum + 1; 
        strTmp.Format("%s_%d",strMoTab, iRandom) ; 
        strMoTab = strTmp ; 
	} 

	//开启聊天功能
	if (strMoTab.IsEmpty())
	{
	    if (m_bChat)
		{
			if ( strDestAddr.GetLength() >= (strlen(m_szSPNumber)+m_nChatLen) || IncludeChinese(strCmd))
		         strMoTab.Format("%s",m_szChatTable);
		}
	}
} 

BOOL CDeliverThread::IsFindedMoTable(int nIndex,CString strCmd, CString &strMoTab ) 
{ 
	CString strCommand; 
	bool IsFinded = false ;  

	strCommand = TrimStr(m_astCmdTab[nIndex].strCmd); 

	if (m_astCmdTab[nIndex].iMatchType == 1) 
	{   //根据指令精确匹配
		if (strCommand.CompareNoCase("00000") == 0) //指令全部分配表中,条件是精确匹配且配置指令为"00000"
		{
			strMoTab = m_astCmdTab[nIndex].strMoTab ; 
			IsFinded = true ;
		}
		else
		{
			if( strCmd.CompareNoCase(strCommand) == 0 ) { 
			    strMoTab = m_astCmdTab[nIndex].strMoTab ; 
			    IsFinded = true ; 
			}
		}
	} 
	else 
	{ //根据指令模糊匹配
		if( strCmd.Find(strCommand) == 0 ) 
		{ 
			strMoTab = m_astCmdTab[nIndex].strMoTab ; 
			IsFinded = true ; 
		}
	} 

	return IsFinded ; 
} 

BOOL CDeliverThread::IncludeChinese(CString strMsg)
{
	int  iStrLength = strMsg.GetLength();
	char *m_newBuffer = new char [iStrLength];
	LPSTR newTempPtr = m_newBuffer;
	BOOL bIncludeChinese = false;
	unsigned short halfChinese=0;
	int  iNumOfWords = 0;
	int  iPos=0;
	
	while( iPos<iStrLength ){
		*newTempPtr = strMsg.GetAt(iPos);
		if((unsigned char)*newTempPtr >= 0xa1){//大于0xa1的字节为汉字字节
            bIncludeChinese = true ;
			break;
		}
		iPos++;
	}
	delete m_newBuffer;

	return bIncludeChinese;
}

BOOL CDeliverThread::IsTimeToForbidMobile()
{
    BOOL bForbid = false;
    CTime tm = CTime::GetCurrentTime();
	CString strCurTime,strForbidTime,strCurDate,strLastDate;

	strCurDate.Format("%04d-%02d-%02d",tm.GetYear(),tm.GetMonth(),tm.GetDay());
    GetPrivateProfileString("系统","当前日期","2002-11-27",m_szCurrentDate,11,SGIP_INI_FILE);
	strLastDate.Format("%s",m_szCurrentDate);

	strCurTime.Format("%02d%02d",tm.GetHour(),tm.GetMinute());
	strForbidTime.Format("%s",m_szForbidTime);
	m_bForbidFlag     = GetPrivateProfileInt("系统","搜索禁止用户标志",0,SGIP_INI_FILE);
    
	if (!m_bForbidFlag && strCurTime >= strForbidTime)
	{
		bForbid = true;
		WritePrivateProfileString("系统","搜索禁止用户标志","1",SGIP_INI_FILE);
	}
	
	if (strCurDate != strLastDate)
	{
        WritePrivateProfileString("系统","搜索禁止用户标志","0",SGIP_INI_FILE);
		WritePrivateProfileString("系统","当前日期",strCurDate,SGIP_INI_FILE);
	}

	return bForbid;
}

void CDeliverThread::LoadInValidMobile()
{
    //载入零星号段
	CSqlExec sql_get(&m_database);
	CString strSql;
	int nRecCount = -1;

    strSql.Format("select startMb from gr_mobile_ctrl where ctrlType=0 and validState=0 order by startMb asc");
	sql_get.SetSqlStatement( strSql );
	if( !sql_get.Open() )
	{
		CString strTmp ;
		strTmp.Format("查询数据库失败,SQL语句是:%s",strSql) ;
		LogFile(strTmp) ;
		return ;
	}

	sql_get.FetchAllData();
	nRecCount = sql_get.RowCount();////有效号码段个数,号码段位数为11
	if (nRecCount <= 0)
		return;
	m_nInvdScrapMbCount = nRecCount; 
	
	if(m_psInvdScrapMb != NULL )///离散零星号码段,号码段位数为11
	{
		delete [] m_psInvdScrapMb ;
		m_psInvdScrapMb = NULL;
	}

	m_psInvdScrapMb = new SMobileCtrl[m_nInvdScrapMbCount];

	for(int row=0 ; row < m_nInvdScrapMbCount ; row++ )
	{
		m_psInvdScrapMb[row].strStart = TrimStr(sql_get.GetFieldValue(row,"startMb"));
	}	
}

BOOL CDeliverThread::IsGameUser(CString strSrc)
{//是否定制了其中的任何一项
	CString strGameSql ;

    for (int i=0;i<m_nGameQuitNum;i++)	{
		strGameSql = TrimStr(m_sGameQuit[i].strGameSQL);
		if (strGameSql.IsEmpty())
			continue;

		if (IsGameUser(strGameSql,strSrc))
			return true ;
	}

	return false ;
}


CString CDeliverThread::GetResMsg(CString &shortmsg,CString &servicetype,CString &csRegMobile,int iFlag)
{
	CString strTemp = "8001 ";
	if(iFlag == 2)
		strTemp = "8003";
	char chSeparator = ' ';
	shortmsg = shortmsg.Mid(7);
	int iPos = shortmsg.Find(chSeparator);
	if(iPos > 0)
	{
		strTemp += shortmsg.Mid(0,iPos);  //SequenceID
		shortmsg = shortmsg.Mid(iPos+1);  //UserID
		iPos = shortmsg.Find(chSeparator);
		if(iPos > 0)
		{
//			servicetype = shortmsg.Mid(0,iPos);
			csRegMobile = shortmsg.Mid(0,iPos);
			shortmsg = shortmsg.Mid(iPos+1);  //SvcID
			iPos = shortmsg.Find(chSeparator);
			if(iPos > 0)
			{
				servicetype = shortmsg.Mid(iPos+1); 
			}else
				servicetype = shortmsg;
		}
	}
	strTemp += " 0";
	return strTemp;
}

void CDeliverThread::SubmitToOrderSend(const char *szMsg, const char *szSAddr, const char *szDAddr, const char *szLinkID, const  char *szServiceType)
{
    CSqlExec sql_deliver(&m_database);
	CString strSql,strMsg;
	CString strSAddr,_strSAddr,strDAddr,_strDAddr;

    _strSAddr = szSAddr;
	_strDAddr = szDAddr;
//8686008600  868188 8188
	if (_strSAddr.Find("86") == 0)
		strSAddr = _strSAddr.Right(_strSAddr.GetLength()-2);
	else
		strSAddr = _strSAddr;
    
	if (_strDAddr.Find(m_szSPNumber) > 1)
	{
		if(_strDAddr.Find("86") == 0)
		    strDAddr = _strDAddr.Right(_strDAddr.GetLength()-2);
		else
            strDAddr = _strDAddr;
	}
	else
		strDAddr = _strDAddr;
	
    strSql.Format("insert into %s(message,mobile,sender,linkid,servicetype,feetype,feevalue,givenvalue,motomtflag,dataencode) \
		           values('%s','%s','%s','%s','%s','1','0','0','0',0)",
				   m_szTableName,
				   szMsg,
				   strSAddr,
				   strDAddr,
				   szLinkID,
				   szServiceType);

	sql_deliver.SetSqlStatement(strSql);

	if(!sql_deliver.Open())
	{
		strMsg.Format("执行SQL语句出错:%s",strSql);
		LogMsg(strMsg);
		LogFile(strMsg);
		return;	
	}

}

⌨️ 快捷键说明

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