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

📄 data.cpp

📁 关于联通的一个统一定制程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	lCmdLen = ntohl(lCmdLen);
	cursor += 4;
	nTmpLen += 4;
	// data packet's length is error
	if (lCmdLen != nLen)
	{
		WriteLog("接收到的数据包的长度跟数据包的长度不符!", _T("I219"));
		return;
	}

	//get first mobile
	temp = strchr(cursor, ',');
	if (temp == 0)
	{
	//	if (lstrlen(cursor) > 11)
	//	{
	//		WriteLog("接收到的数据包的目的手机号不对!", _T("I219"));
	//		return;
	//	}
		lstrcpy(info.szDestMobile, cursor);
	}
	else
	{
	//	if (temp - cursor > 11)
	//	{
	//		WriteLog("接收到的数据包的目的手机号不对!", _T("I219"));
	//		return;
	//	}
		strncpy(info.szDestMobile, cursor, temp - cursor);
		info.szDestMobile[temp - cursor] = '\0';
	}
	nTmpLen += lstrlen(cursor) + 1;
	cursor += lstrlen(cursor) + 1;

	nTmpLen += 4;
	if (nTmpLen >= nLen)
	{
		szLog.Format("接收到的数据包的长度太短![Mobile:%s]", info.szDestMobile);
		WriteLog(szLog, _T("I219"));
		return;
	}
	//msg level
	memcpy(&info.lMsgLevel, cursor, 4);
	info.lMsgLevel = ntohl(info.lMsgLevel);
	cursor += 4;
	if (info.lMsgLevel <= 1 || info.lMsgLevel > 9)
		info.lMsgLevel = 3;
	info.lMsgLevel += 10;	// IOD: 10-19

	//Service Sub ID
	lstrcpy(info.szSubID, cursor);
	nTmpLen += lstrlen(cursor) + 1;
	cursor += lstrlen(cursor) + 1;
	if (nTmpLen >= nLen)
	{
		szLog.Format("接收到的数据包的长度太短![Mobile:%s;MsgLevel:%d]", info.szDestMobile, info.lMsgLevel);
		WriteLog(szLog, _T("I219"));
		return;
	}

	//Source TemrID
	lstrcpy(info.szSrcTermID, cursor);
	nTmpLen += lstrlen(cursor) + 1;
	cursor += lstrlen(cursor) + 1;
	if (nTmpLen >= nLen)
	{
		szLog.Format("接收到的数据包的长度太短![Mobile:%s;MsgLevel:%d;SubID:%s]", info.szDestMobile, info.lMsgLevel, info.szSubID);
		WriteLog(szLog, _T("I219"));
		return;
	}

	//Source gw ID
	lstrcpy(info.szSrcGWID, cursor);
	nTmpLen += lstrlen(cursor) + 1;
	cursor += strlen(cursor) + 1;
	if (nTmpLen >= nLen)
	{
		szLog.Format("接收到的数据包的长度太短![Mobile:%s;MsgLevel:%d;SubID:%s;SrcMobile:%s]",
			info.szDestMobile, info.lMsgLevel, info.szSubID, info.szSrcTermID);
		WriteLog(szLog, _T("I219"));
		return;
	}

	nTmpLen += 4;
	if (nTmpLen > nLen)
	{
		szLog.Format("接收到的数据包的长度太短![Mobile:%s;MsgLevel:%d;SubID:%s;SrcMobile:%s;SrcGW:%s]",
			info.szDestMobile, info.lMsgLevel, info.szSubID, info.szSrcTermID, info.szSrcGWID);
		WriteLog(szLog, _T("I219"));
		return;
	}
	//msg format
	memcpy(&info.lMsgFmt, cursor, 4);
	info.lMsgFmt = ntohl(info.lMsgFmt);
	cursor += 4;
	if (info.lMsgFmt != 0 && info.lMsgFmt != 3 &&
		info.lMsgFmt != 4 && info.lMsgFmt != 8 &&
		info.lMsgFmt != 15)
	{
//		szLog.Format("接收到的数据包的内容格式不对![Mobile:%s;MsgLevel:%d;SubID:%s;SrcMobile:%s;SrcGW:%s;MsgFmt:%d]",
//			info.szDestMobile, info.lMsgLevel, info.szSubID, info.szSrcTermID, info.szSrcGWID, info.lMsgFmt);
//		WriteLog(szLog, _T("I219"));
//		return;
		info.lMsgFmt = 0;	// default is ASCII
	}

	nTmpLen += 4;
	if (nTmpLen > nLen)
	{
		szLog.Format("接收到的数据包的长度太短![Mobile:%s;MsgLevel:%d;SubID:%s;SrcMobile:%s;SrcGW:%s;MsgFmt:%d]",
			info.szDestMobile, info.lMsgLevel, info.szSubID, info.szSrcTermID, info.szSrcGWID, info.lMsgFmt);
		WriteLog(szLog, _T("I219"));
		return;
	}
	//msg length
	memcpy(&info.lMsgLen, cursor, 4);
	info.lMsgLen = ntohl(info.lMsgLen);
	cursor += 4;

	if (nTmpLen + info.lMsgLen > nLen)
	{
		szLog.Format("接收到的数据包的长度太短![Mobile:%s;MsgLevel:%d;SubID:%s;SrcMobile:%s;SrcGW:%s;MsgFmt:%d;MsgLen:%d]",
			info.szDestMobile, info.lMsgLevel, info.szSubID, info.szSrcTermID, info.szSrcGWID, info.lMsgFmt, info.lMsgLen);
		WriteLog(szLog, _T("I219"));
		return;
	}
	//msg content
	memcpy(info.szContent, cursor, info.lMsgLen);

	//msg time
	info.lTime = CTime::GetCurrentTime().GetTime();

	//add to log
	WriteLog(LT_IAS, info.szDestMobile, info.szSubID, info.lMsgFmt, info.lMsgLen,
		info.szContent, _TEXT(""), info.szSrcGWID, info.szSrcTermID, info.lMsgLevel, "", NULL, NULL, 0, pszFrom);

	// add to list
	m_RecLocker.Lock();
	m_RecMsgList.push_back(info);
//	m_RecMsgList.AddTail(info);
	m_RecLocker.Unlock();
}

BOOL CData::GetOneRecMsg(LPIOD_Info pInfo)
{
	BOOL bOK = TRUE;
	m_RecLocker.Lock();
	if (!m_RecMsgList.empty()) // have data
	{
		*pInfo = m_RecMsgList.front();
		m_RecMsgList.pop_front();
	}
	else
		bOK = FALSE;
	m_RecLocker.Unlock();
	return bOK;
}

void CData::AddOneSendMsg(LPIOD_Info pInfo)
{
	m_SendLocker.Lock();
	m_SendMsgList.push_back(*pInfo);
	m_SendLocker.Unlock();
}

BOOL CData::GetOneSendMsg(LPIOD_Info pInfo)
{
	BOOL bOK = TRUE;
	m_SendLocker.Lock();
	if (!m_SendMsgList.empty()) // have data
	{
		*pInfo = m_SendMsgList.front();
		m_SendMsgList.pop_front();
		if (CTime::GetCurrentTime().GetTime() - pInfo->lTime < theCfgInfo.nRetryInterval && pInfo->nLife != 0)
		{
			m_SendMsgList.push_back(*pInfo);
			bOK = FALSE;
		}
	}
	else
		bOK = FALSE;
	m_SendLocker.Unlock();

	return bOK;
}

void CData::AddTransferMsg(LPIOD_Info pInfo)
{
	m_TransLocker.Lock();
	m_TransMsgList.push_back(*pInfo);
	m_TransLocker.Unlock();
}

BOOL CData::GetTransferMsg(LPIOD_Info pInfo)
{
	BOOL bOK = TRUE;

	m_TransLocker.Lock();

	if (!m_TransMsgList.empty()) // have data
	{
		*pInfo = m_TransMsgList.front();
		m_TransMsgList.pop_front();
		if (CTime::GetCurrentTime().GetTime() - pInfo->lTime < theCfgInfo.nRetryInterval && pInfo->nLife != 0)
		{
			m_TransMsgList.push_back(*pInfo);
			bOK = FALSE;
		}
	}
	else
		bOK = FALSE;

	m_TransLocker.Unlock();

	return bOK;
}

void CData::Add0000Msg(LPIOD_Info pInfo)
{
	m_0000Locker.Lock();
	m_0000MsgList.push_back(*pInfo);
	m_0000Locker.Unlock();
}

BOOL CData::Get0000Msg(LPIOD_Info pInfo)
{
	BOOL bOK = TRUE;

	m_0000Locker.Lock();

	if (!m_0000MsgList.empty()) // have data
	{
		*pInfo = m_0000MsgList.front();
		m_0000MsgList.pop_front();
		if (CTime::GetCurrentTime().GetTime() - pInfo->lTime < theCfgInfo.nRetryInterval && pInfo->nLife != 0)
		{
			m_0000MsgList.push_back(*pInfo);
			bOK = FALSE;
		}
	}
	else
		bOK = FALSE;

	m_0000Locker.Unlock();

	return bOK;
}

void CData::SetMsg(LPIOD_Info pIOD, LPCTSTR pszMsg, LPCTSTR pszSendNo, LPCTSTR pszSubID, LPCTSTR pszFeeCode, LPCTSTR pszFeeType, int nMsgType, LPCOMMONINFO pInfo)
{
	pIOD->nLife=0;
	pIOD->lTime=CTime::GetCurrentTime().GetTime();

	if (pszMsg != NULL)
	{
		CString szTmp(pszMsg);
		if (szTmp.Find("{HOTLINE}")!=-1)
		{
			if (pInfo->szHotline.IsEmpty())
				szTmp.Replace("{HOTLINE}", "02124028787");
			else
				szTmp.Replace("{HOTLINE}", pInfo->szHotline);
		}
		if (szTmp.Find("{ENTRYNO}")!=-1)
		{
			if (pInfo->szEntryno.IsEmpty())
				szTmp.Replace("{ENTRYNO}", "1186666");
			else
				szTmp.Replace("{ENTRYNO}", pInfo->szEntryno);
		}
		lstrcpy(pIOD->szContent, szTmp);
	}
	pIOD->lMsgLen = lstrlen(pIOD->szContent);
	pIOD->lMsgType=nMsgType;

	if (pszSendNo!=NULL)
		lstrcpy(pIOD->szSrcTermID, pszSendNo);
	pIOD->lMsgFmt=15;
	lstrcpy(pIOD->szSubID, pszSubID);
	lstrcpy(pIOD->szFeeCode, pszFeeCode);
	lstrcpy(pIOD->szFeeType, pszFeeType);

	AddOneSendMsg(pIOD);
}

void CData::SetMsg2(LPVOID pDB, LPIOD_Info pIOD, LPCTSTR pszCmd,list<pair<CString,CString> > * ReplacePair, LPCOMMONINFO pInfo)
{
	OUTPUTMSGLIST msglist;
	((CMyDatabase*)pDB)->GetOutputMsg(pIOD->szDestMobile, pszCmd, &msglist);

	list<OUTPUTMSG>::iterator msg;
	list<pair<CString,CString> >::iterator it2;
	for (msg=msglist.begin(); msg!=msglist.end(); msg++)
	{
		//B add by joy 2003-08-26
		CString strContent=(*msg).szMsg;
		if(ReplacePair!=NULL)
		{		
			for(it2=ReplacePair->begin();it2!=ReplacePair->end();it2++)
			{
				strContent.Replace(it2->first,it2->second);
			}
		}
		(*msg).szMsg=strContent;
		//E add by joy 2003-08-26
		SetMsg(pIOD, (*msg).szMsg, (*msg).szSendNo, (*msg).szSubID, (*msg).szFeeCode, (*msg).szFeeType, (*msg).nMsgType, pInfo);
	}
}

⌨️ 快捷键说明

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