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

📄 server.cpp

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


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 + -