📄 server.cpp
字号:
void CServerThread::SendOnePicture(const char *szUserNumber, const char *szChargeNumber,const char *szSender, const char * szFileName, const char *szServiceType,const char *szLinkID, char cFeeType, const char *szFeeValue, const char *szGivenValue, char cMOrelatetoMTFlag,int iMobileType,int &iCount,int iStatusRpt,int iPriority)
{
CFile m_file;
BYTE bData[141];
int nBytesRead=0;
SServerNodeBuffer *pstServerNodeBuf;
char szMobile[200],szFeeNum[200],cMessageCoding;//,szMsg[2048];
CString strMsg,strMsgID,strSql,strGivenValue;
int nTotalBytes;
int nCurrPos=0;
int iIndex,iTotalFeeValue;
CString strFeeValue;
strFeeValue=szFeeValue;
iCount = 1;
/*
iMobileType--;
if(iMobileType>=iMobileTypeNum || iMobileType<0)
{
iMobileType=0;
}
*/
if (iMobileType == 10 ) //摩托罗拉
{
iMobileType = 1;
cMessageCoding = 15;
}
else if (iMobileType == 100 ) //西门子
{
iMobileType = 1;
cMessageCoding = 4;
}
else
{
iMobileType = 0;
cMessageCoding = 4;
}
int index = GetMinUnHandleServerIndex();
//没有可用的连接
if(index==-1) return;
//非法手机号
// if(strlen(szUserNumber)<11) return;
if(szUserNumber[0] =='1')
{
strcpy(szMobile,"86");
strcat(szMobile,szUserNumber);
}
else
strcpy(szMobile,szUserNumber);
if(strlen(szChargeNumber) !=0)
{
if(szChargeNumber[0] =='1')
{
strcpy(szFeeNum,"86");
strcat(szFeeNum,szChargeNumber);
}
else
strcpy(szFeeNum,szChargeNumber);
}
else
strcpy(szFeeNum,"");
pstServerNodeBuf =(SServerNodeBuffer *)m_stServerNodeBuf.GetAt(index);
if(m_file.Open(szFileName,CFile::modeRead))
{
iIndex=0;
nTotalBytes=m_file.GetLength();
if (nTotalBytes%140 == 0)
iCount = nTotalBytes/140;
else
iCount = nTotalBytes/140+1; //modify by ycf 2002-11-18
if (atoi(szFeeValue) >= 100)
iTotalFeeValue = atoi(szFeeValue);
else
iTotalFeeValue = iCount*atoi(szFeeValue);
strMsg.Format("[图片铃声]用户:%s 发送人:%s 付费人:%s 手机类型:%s 文件:%s ",szMobile,szSender,szFeeNum,pPictureType[iMobileType].strMobileType,szFileName);
LogMsg(strMsg);
while(nTotalBytes>0)
{
m_file.Seek(nCurrPos,CFile::begin);
nBytesRead=m_file.Read(bData,140);
if(nBytesRead>0)
{
if(iIndex)
{
strFeeValue.Format("%d",m_tplsfee.iFeeValue);//拆成多条发送时非第一条免费
cFeeType = m_tplsfee.iFeeType;
cMOrelatetoMTFlag = m_tplsfee.iMotomtFlag;
strGivenValue.Format("%d",m_tplsfee.iGivenValue);
}
else
{
strFeeValue.Format("%d",iTotalFeeValue);
strGivenValue.Format("%s",szGivenValue);
}
m_stPdu.SubmitSingle(szMobile,
szFeeNum,
szSender,
bData,
nBytesRead,
szServiceType,
szLinkID,
cFeeType,
strFeeValue,
strGivenValue,
"",
cMOrelatetoMTFlag,
cMessageCoding,
pPictureType[iMobileType].iTP_pid,
pPictureType[iMobileType].iTP_udhi,
iStatusRpt,
iPriority,
m_nExpireSpan);
if(SendPacket(&pstServerNodeBuf->m_stSocket,m_stPdu.GetBuffer(),m_stPdu.GetLen()) == m_stPdu.GetLen())
{
AddToTaskList(pstServerNodeBuf,m_stPdu.GetBuffer(),m_stPdu.GetLen(),m_stPdu.m_iSequenceNumber1,m_stPdu.m_iSequenceNumber2,m_stPdu.m_iSequenceNumber3);
}
iIndex++;
Sleep(20);
}
nTotalBytes-=nBytesRead;
nCurrPos+=nBytesRead;
}
m_file.Close();
}
else
{
strMsg.Format("无法打开文件--%s",szFileName);
LogMsg(strMsg);
LogTPLSFile(strMsg);
}
}
BOOL CServerThread::SubmitToDatabase(const char *szSql)
{
CSqlExec sql_sm(&m_database);
sql_sm.SetSqlStatement(szSql);
if(!sql_sm.Open())
{
printf("执行SQL语句错误:%s\n",szSql);
LogFile(szSql);
return FALSE;
}
else
{
return TRUE;
}
}
BOOL CServerThread::AnalyseMessage(CString &strSrc,CString &strDest,CString strDivision)
{
int nPos = -1,nLen=0;
CString strTmp;
BOOL bAnalyse = false;
strTmp.Format("%s",strSrc);
if (strTmp.IsEmpty())
bAnalyse = false;
else
bAnalyse = true;
nLen = strDivision.GetLength();
nPos = strTmp.Find(strDivision);
if (nPos != -1)
{
strDest = strTmp.Left(nPos);
strSrc = strTmp.Mid(nPos+nLen);
}
else
{
strDest = strSrc;
strSrc = "";
}
return bAnalyse;
}
int CServerThread::SendMessage(CString strMobile,CString strTempMessage,CString strChargeNumber,
CString strSender,CString strServiceType,CString strLinkID,char cFeeType,CString strFeeValue,CString strGivenValue,
const char* szScheduleTime,char cMessageCoding,int nMOtoMTFlag,int iStatusRpt)
{
int nRet;
if(m_nIndex && bLongMessageFree) //一条短消息拆成多条发送时非第一条免费
{
strFeeValue.Format("%d",m_overfee.iFeeValue);
strGivenValue.Format("%d",m_overfee.iGivenValue);
if (!m_overfee.strServiceType.IsEmpty())
strServiceType.Format("%s",m_overfee.strServiceType);
nMOtoMTFlag = m_overfee.iMotomtFlag;
cFeeType = m_overfee.iFeeType;
}
if(IncludeChinese(strTempMessage))
{
nRet = SendShortMessage(strMobile,strTempMessage,strChargeNumber,strSender,strServiceType,strLinkID,cFeeType,
strFeeValue,strGivenValue,"",15,nMOtoMTFlag,iStatusRpt,m_nPriority,m_nExpireSpan);
}
else
{
nRet = SendShortMessage(strMobile,strTempMessage,strChargeNumber,strSender,strServiceType,strLinkID,cFeeType,
strFeeValue,strGivenValue,"",SGIP_DC_ASCII,nMOtoMTFlag,iStatusRpt,m_nPriority,m_nExpireSpan);
}
Sleep(m_nContinueSendTimes);
ProcessReceivePdu();
m_nIndex++;
if(nRet == -1)
return -1;
// 日志记录 每条记录
SubmitToSendMsgLog(strTempMessage,strMobile,strSender,strChargeNumber,strServiceType,strLinkID,cFeeType,strFeeValue,strGivenValue,nMOtoMTFlag);
return 0;
}
//
void CServerThread::LoadFiltrateMsg()
{
CSqlExec sql_get(&m_database) ;
CString strSql,strMsg;
strSql.Format("SELECT * FROM gr_message_filter where type <= %d ",m_nFilType);
sql_get.SetSqlStatement(strSql);
if( !sql_get.Open())
{
strMsg.Format("执行SQL语句出错:%s",strSql);
LogMsg(strMsg);
LogFile(strMsg);
return;
}
sql_get.FetchAllData();
m_nFiltrateNum = sql_get.RowCount();
if(m_sFiltrateMsg != NULL)
{
delete [] m_sFiltrateMsg;
m_sFiltrateMsg = NULL;
}
m_sFiltrateMsg = new FiltrateMsg[m_nFiltrateNum];
for(int row=0; row<m_nFiltrateNum;row++)
{
m_sFiltrateMsg[row].bFeedBack = atoi(sql_get.GetFieldValue(row,"reback")); //是否匹配
m_sFiltrateMsg[row].strFilMsg = TrimStr(sql_get.GetFieldValue(row,"content")); //匹配关键字
m_sFiltrateMsg[row].strFeedBack = TrimStr(sql_get.GetFieldValue(row,"feedback")); //反馈内容
}
}
void CServerThread::LoadFreeUser()
{
CSqlExec sql_get(&m_database) ;
CString strSql,strMsg;
strSql.Format("SELECT * FROM gr_cmd_freeuser order by mobile ");
sql_get.SetSqlStatement(strSql);
if( !sql_get.Open())
{
strMsg.Format("执行SQL语句出错:%s",strSql);
LogMsg(strMsg);
LogFile(strMsg);
return;
}
sql_get.FetchAllData();
m_nFreeUserNum = sql_get.RowCount();
if(m_pstrFreeUser != NULL)
{
delete [] m_pstrFreeUser;
m_pstrFreeUser = NULL;
}
m_pstrFreeUser = new CString[m_nFreeUserNum];
for(int row=0; row<m_nFreeUserNum;row++)
{
m_pstrFreeUser[row] = TrimStr(sql_get.GetFieldValue(row,"mobile"));
}
}
BOOL CServerThread::IsFiltrateMsg(CString strMessage,CString &strReBack,BOOL &bFeedBack)
{
//0-匹配,1-匹配头,2-匹配尾,3-多项匹配
BOOL bFiltrate = false;
CString strTmp;
strMessage.MakeUpper();
bFeedBack = false;
for (int i=0;i<m_nFiltrateNum;i++)
{
strTmp = m_sFiltrateMsg[i].strFilMsg;
if (strMessage.Find(strTmp) != -1)
{
if (m_sFiltrateMsg[i].bFeedBack)
{
strReBack = m_sFiltrateMsg[i].strFeedBack;
bFeedBack = true;
}
else
bFeedBack = false;
bFiltrate = true;
}
}
return bFiltrate;
}
BOOL CServerThread::IsFreeUser(CString strMobile)
{
BOOL bFree = false;
for (int i=0;i<m_nFreeUserNum;i++)
{
if (m_pstrFreeUser[i].CompareNoCase(strMobile) == 0)
{
bFree = true;
break;
}
}
return bFree;
}
BOOL CServerThread::AnalyseMessage(CString strMessage,CString strTmp)
{
BOOL bFiltrate = false;
CString strSrc,strDest;
strSrc.Format("%s",strTmp);
while(AnalyseMessage(strSrc,strDest,"@@"))
{
if (strMessage.Find(strDest) != -1)
bFiltrate = true;
else
{
bFiltrate = false;
break;
}
}
return bFiltrate;
}
BOOL CServerThread::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;
}
int CServerThread::AnsiToEncode(char *pSrcCode,int nLen,CString &strDestCode)
{
char pTmp[256]={0};
WORD pDest[256];
int nSize = ::MultiByteToWideChar(CP_ACP, 0, pSrcCode,nLen, pDest,sizeof(pDest));
char cTmp;
for(int i=0,j=0;j<nSize;j++)
{
cTmp = HIBYTE(pDest[j]);
memcpy(pTmp+i,&cTmp,1);
i++;
cTmp = LOBYTE(pDest[j]);
memcpy(pTmp+i,&cTmp,1);
i++;
}
strDestCode.Format("%s",pTmp);
return 2*nSize;
}
void CServerThread::WriteActiveFlag()
{
static tOldTime2=time(NULL);
time_t tCurTime;
double lDiffTime;
CString strTrace;
time(&tCurTime);
lDiffTime = abs(difftime(tCurTime , tOldTime2)) - 30;
if (lDiffTime > 0 ){
TRY
{
CFile f( m_szActiveFlag, CFile::modeCreate | CFile::modeWrite );//1202 m_szActiveFlag= iqdevp0.pid
f.Close();
}
CATCH( CFileException, e )
{
strTrace.Format("%s cant be created.",m_szActiveFlag);
LogMsg(strTrace);//1202
}
END_CATCH
tOldTime2 = tCurTime;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -