📄 deliverthread.cpp
字号:
}
m_stDeliverNodeBuf.RemoveAll();
for(i=0;i<m_stMoniterNodeBuf.GetSize();i++)
{
pstSocket =(CTcpAsyncSocket *)m_stMoniterNodeBuf.GetAt(i);
pstSocket->Close();
delete m_stMoniterNodeBuf.GetAt(i);
}
m_stMoniterNodeBuf.RemoveAll();
m_stMoniterSocket.Close();
}
BOOL CDeliverThread::InitInstance()
{
BOOL bTrue = true;
LogMsg("最新版本V 2.1.0(Build0807)Modify resend message process and exit process.");
LoadIni();
while(bTrue && !g_bDeliverThreadExit)
{
if(ConnectDB())
{
bTrue = false;
}
else
{
Sleep(500);
}
}
LoadCmdTab();
// add by ycf 20020825
if(m_bEnableNumCtrl)
LoadMobile();
if(m_bEnableGameQuit)
LoadCmdGameQuit();
_beginthread(RunDeliverProc,0,this);
return TRUE;
}
int CDeliverThread::ExitInstance()
{
// TODO: perform any per-thread cleanup here
return CWinThread::ExitInstance();
}
BEGIN_MESSAGE_MAP(CDeliverThread, CWinThread)
//{{AFX_MSG_MAP(CDeliverThread)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDeliverThread message handlers
int CDeliverThread::Run()
{
SClientNodeBuffer *pstClientNodeBuf;
SDeliverNodeBuffer *pstDeliverNodeBuf;
char szRecvBuf[MAX_PACKET_SIZE +1];
int nRecvLen,i,k;
InitSocket();
while(!g_bDeliverThreadExit)
{
if (m_bConnectDeliverDB)
{
for(i=0;i<m_stDeliverNodeBuf.GetSize();i++)
{
m_pSection[i].Lock(INFINITE);
pstDeliverNodeBuf =(SDeliverNodeBuffer *)m_stDeliverNodeBuf.GetAt(i);
for(k=0;k<pstDeliverNodeBuf->m_stClientNodeBuf.GetSize();k++)
{
pstClientNodeBuf =(SClientNodeBuffer *)pstDeliverNodeBuf->m_stClientNodeBuf.GetAt(k);
memset(szRecvBuf,'\0',MAX_PACKET_SIZE +1);
nRecvLen = ReceivePdu(pstClientNodeBuf->m_pstClientSocket,szRecvBuf,MAX_PACKET_SIZE);
if(nRecvLen >0)
{
szRecvBuf[nRecvLen] ='\0';
HandleDeliverMsg(pstDeliverNodeBuf,pstClientNodeBuf,szRecvBuf,nRecvLen);
//LogMsg(szRecvBuf,1);
}
}
m_pSection[i].Unlock();
}
HandleActiveTest();
// LogMsg("Deliver Thread Active!") ;
Sleep(10);
}
else
{
ConnectDB();
Sleep(1000);
}
}
m_database.Close();
Quit();
return 0;
}
void CDeliverThread::LoadCmdGameQuit()
{
CSqlExec sql_get(&m_database) ;
CString strSql,strMsg;
strSql.Format("SELECT * FROM gr_Cmd_GameQuit order by srccmd ");
sql_get.SetSqlStatement(strSql);
if( !sql_get.Open())
{
strMsg.Format("执行SQL语句出错:%s",strSql);
LogMsg(strMsg);
LogFile(strMsg);
return;
}
sql_get.FetchAllData();
m_nGameQuitNum = sql_get.RowCount();
if(m_sGameQuit != NULL)
{
delete [] m_sGameQuit;
m_sGameQuit = NULL;
}
m_sGameQuit = new SGameQuit[m_nGameQuitNum];
for(int row=0; row<m_nGameQuitNum;row++)
{
m_sGameQuit[row].strSrcCmd = TrimStr(sql_get.GetFieldValue(row,"SrcCmd"));
m_sGameQuit[row].strSrcCmd.MakeUpper();
m_sGameQuit[row].strGameName = TrimStr(sql_get.GetFieldValue(row,"GameName"));
m_sGameQuit[row].strMessage = TrimStr(sql_get.GetFieldValue(row,"message"));
m_sGameQuit[row].strGameSQL = TrimStr(sql_get.GetFieldValue(row,"GameSQL"));
m_sGameQuit[row].strQuitSQL = TrimStr(sql_get.GetFieldValue(row,"QuitSQL"));
}
}
void CDeliverThread::LoadCmdTab()
{
CSqlExec sql_get(&m_database) ;
CString strSql,strMsg;
strSql.Format("SELECT * FROM gr_Cmd_MoTab ORDER BY OrdIndex, SenderType DESC, MatchType DESC ");
sql_get.SetSqlStatement( strSql );
if( !sql_get.Open())
{
strMsg.Format("执行SQL语句出错:%s",strSql);
LogMsg(strMsg);
LogFile(strMsg);
return;
}
sql_get.FetchAllData();
m_nNumOfGameCmd = sql_get.RowCount();
if(m_astCmdTab != NULL)
{
delete [] m_astCmdTab;
m_astCmdTab = NULL;
}
m_astCmdTab = new SCmdTable[m_nNumOfGameCmd];
for(int row=0; row<m_nNumOfGameCmd;row++)
{
m_astCmdTab[row].strCmd=TrimStr(sql_get.GetFieldValue(row,"Cmd"));
m_astCmdTab[row].iMatchType=atoi(sql_get.GetFieldValue(row,"MatchType"));
m_astCmdTab[row].iMoTabNum=atoi(sql_get.GetFieldValue(row,"MoTabNum"));
m_astCmdTab[row].strCmd.MakeUpper();
m_astCmdTab[row].strMoTab=TrimStr(sql_get.GetFieldValue(row,"MoTabName"));
m_astCmdTab[row].strSender=TrimStr(sql_get.GetFieldValue(row,"Sender"));
m_astCmdTab[row].iSenderType=atoi(sql_get.GetFieldValue(row,"SenderType"));
}
}
void CDeliverThread::SubmitToTable(const char *szMsg, const char *szSAddr, const char *szDAddr,const char *szLinkID, const char *szTable)
{
CSqlExec sql_deliver(&m_database);
CString strSql,strMsg;
CString strSAddr,_strSAddr,strDAddr,_strDAddr;
_strSAddr = szSAddr;
_strDAddr = szDAddr;
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(short_msg,src_addr,dst_addr,linkid) \
values('%s','%s','%s','%s')",szTable,szMsg,strSAddr,strDAddr,szLinkID);
sql_deliver.SetSqlStatement(strSql);
if(!sql_deliver.Open())
{
strMsg.Format("执行SQL语句出错:%s",strSql);
LogMsg(strMsg);
LogFile(strMsg);
ACTIVE_FLAG = false;
return;
}
}
void CDeliverThread::SubmitToMonthTable(const char *szMsg, const char *szSAddr, const char *szDAddr,const char *szLinkID, const char *szTable)
{
CSqlExec sql_deliver(&m_database);
CString strSql,strMsg;
CString strSAddr,_strSAddr,strDAddr,_strDAddr;
_strSAddr = szSAddr;
_strDAddr = szDAddr;
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(short_msg,src_addr,dst_addr,linkid,tablename) \
values('%s','%s','%s','%s','%s')",m_szMonthTable,szMsg,strSAddr,strDAddr,szLinkID,szTable);
sql_deliver.SetSqlStatement(strSql);
if(!sql_deliver.Open())
{
strMsg.Format("执行SQL语句出错:%s",strSql);
LogMsg(strMsg);
LogFile(strMsg);
ACTIVE_FLAG = false;
return;
}
}
void CDeliverThread::SubmitToSend(const char *szMsg, const char *szSAddr, const char *szDAddr,const char *szLinkID,BOOL bCancle)
{
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;
if (bCancle)
{
strSql.Format("insert into %s(message,mobile,sender,linkid,servicetype,feetype,feevalue,givenvalue,motomtflag) \
values('%s','%s','%s','%s','%s','%d','%d','%d','%d')",
m_szTableName,
szMsg,
strSAddr,
strDAddr,
szLinkID,
m_canclefee.strServiceType,
m_canclefee.iFeeType,
m_canclefee.iFeeValue,
m_canclefee.iGivenValue,
m_canclefee.iMotomtFlag);
}
else
{
strSql.Format("insert into %s(message,mobile,sender,linkid,servicetype,feetype,feevalue,givenvalue,motomtflag) \
values('%s','%s','%s','%s','%s','%d','%d','%d','%d')",
m_szTableName,
szMsg,
strSAddr,
strDAddr,
szLinkID,
m_deffee.strServiceType,
m_deffee.iFeeType,
m_deffee.iFeeValue,
m_deffee.iGivenValue,
m_deffee.iMotomtFlag);
}
sql_deliver.SetSqlStatement(strSql);
if(!sql_deliver.Open())
{
strMsg.Format("执行SQL语句出错:%s",strSql);
LogMsg(strMsg);
LogFile(strMsg);
return;
}
}
// add by ycf 20020825
BOOL CDeliverThread::IsEnableMobile(const char *szSAddr)//号码段控制
{ //判断是否是本地区的有效号码段
CString strMobileHead ,strMobile;
BOOL bResult = -1 ;
strMobile = szSAddr ;
strMobile.TrimLeft();
strMobile.TrimRight();
if (strMobile.Find("86") == 0)
strMobileHead = strMobile.Mid(2);
else
strMobileHead = strMobile;
//判断离散零星号码表
bResult = IsScrapMobile(strMobileHead) ;//查询零散号码表
if(bResult != -1)//-1,表示零散号码表为空
return bResult ;
//判断连续号码控制表
if(m_bMbCtrlFlag)
{//1,判断号码区间段(11位数)
bResult = IsConsecutiveMobile(strMobileHead) ;//(包括有效和无效两种)
if(bResult != -1)//-1,表示号码区间段表为空
return bResult ;
}
else{//判断号码头表
bResult = IsMobileHead(strMobileHead) ;//(包括有效和无效两种)
if(bResult != -1)//-1,表示号码头表为空
return bResult ;
}
return TRUE ;
}
BOOL CDeliverThread::IsMobileHead(CString strMobile)
{//返回值: 1,有效号码;0,无效号码 宋璟(2002-8-29)
int nMax, nMin, nIndex, nHeadLength;
CString strHead ;
//先在无效号码表中查找
nMin = 0 ;
nMax = m_saInvdMbHead.GetSize() ;
if(nMax > 0)
{
while(nMin <= nMax)
{
nIndex = (nMin + nMax) / 2 ;
nHeadLength = m_saInvdMbHead.GetAt( nIndex ).GetLength() ;
strHead = strMobile.Left(nHeadLength) ;
if (strHead < m_saInvdMbHead.GetAt( nIndex ))
nMax = nIndex - 1 ;
else
if (strHead > m_saInvdMbHead.GetAt( nIndex ))
{
nMin = nIndex + 1 ;
if(nMin == m_saInvdMbHead.GetSize())
nMin = nMax + 1 ;
}
else
return FALSE ;
}
return TRUE ;//无效号码表中未找到
}
//当无效号码表为空时,就在有效号码表中查找
nMin = 0 ;
nMax = m_saValidMbHead.GetSize() ;
if(nMax > 0)
{
while(nMin <= nMax)
{
nIndex = ( nMin + nMax ) / 2 ;
nHeadLength = m_saValidMbHead.GetAt( nIndex ).GetLength() ;
strHead = strMobile.Left( nHeadLength ) ;
if(strHead < m_saValidMbHead.GetAt( nIndex ) )
nMax = nIndex - 1 ;
else
if (strHead > m_saValidMbHead.GetAt( nIndex ))
{
nMin = nIndex + 1 ;
if(nMin == m_saValidMbHead.GetSize())
nMin = nMax + 1 ;
}
else
return TRUE ;
}
}
else
return TRUE ;//有效号码表和无效号码表都为空
return FALSE ;//有效号码表中未找到
}
BOOL CDeliverThread::IsScrapMobile(CString strMobile)
{//返回值: 1,有效号码;0,无效号码; -1,没有找到或表空 宋璟(2002-8-29)
int nMax, nMin, nIndex;
//先在无效号码表中查找
nMin = 0 ;
nMax = m_nInvdScrapMbCount ;
if(nMax > 0 )
{
while(nMin <= nMax)
{
nIndex = (nMin + nMax) / 2 ;
if(strMobile < m_psInvdScrapMb[ nIndex ].strStart )
nMax = nIndex - 1 ;
else
if (strMobile > m_psInvdScrapMb[ nIndex ].strStart)
{
nMin = nIndex + 1 ;
if(nMin == m_nInvdScrapMbCount)
nMin = nMax + 1 ;
}
else
return FALSE ;
}
}
//当无效号码表为空或没有找到时,就在有效号码表中查找
nMin = 0 ;
nMax = m_nValidScrapMbCount ;
if(nMax > 0)
{
while(nMin <= nMax)
{
nIndex = (nMin + nMax) / 2 ;
if(strMobile < m_psValidScrapMb[ nIndex ].strStart )
nMax = nIndex - 1 ;
else
if (strMobile > m_psValidScrapMb[ nIndex ].strStart)
{
nMin = nIndex + 1 ;
if(nMin == m_nValidScrapMbCount)
nMin = nMax + 1 ;
}
else
return TRUE ;
}
}
return -1 ;//当无效号码表为空或没有找到时
//当有效号码表为空或没有找到时
}
BOOL CDeliverThread::IsConsecutiveMobile(CString strMobile)
{
int i ;
if((m_nValidMbCount <= 0)
&& (m_nValidMbCount <= 0))
return -1 ;
for( i = 0 ; i < m_nInvalidMbCount ; i++ )
{
if( ( m_psInvalidMb[ i ].strStart <= strMobile ) &&
( strMobile <= m_psInvalidMb[ i ].strEnd ) )
return FALSE ;
}
if(m_nInvalidMbCount > 1 )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -