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

📄 sgipprocthread.cpp

📁 1、自己编写的遵循SGIP1.1的短信网关模拟程序。仅供测试、学习。 2、该程序只实现了SGIP1.1协议的一部分。
💻 CPP
字号:
#include "stdafx.h"
#include "SgipServiceDemo.h"
#include "SgipProcThread.h"
#include "SgipServiceDemoDlg.h"
#include "Parsecstring.h"

extern long g_lSerialNo;
extern unsigned long g_ulSerialNo;
extern long g_lReceiveMsgCount;

////////////////////////////////////////////////////////////////////////////
//function:得到一个唯一标志该短消息的号码
//input: 
//return:
////////////////////////////////////////////////////////////////////////////
unsigned long CreateGlobalCycleNo()
{

	::InterlockedIncrement(&(g_lSerialNo));
	g_ulSerialNo = (unsigned long)g_lSerialNo;
	if(g_ulSerialNo == 0)
	{
		::InterlockedIncrement(&(g_lSerialNo));
		g_ulSerialNo = (unsigned long)g_lSerialNo;
	}
	return g_ulSerialNo;
}
///////////////////////////
//由于本程序是在《sgip客户端测试》基础上修改而来,所以部分变量或函数的名称
//没有修改,特别是有关“MT”“MO”的名称。
///////////////////////////

UINT TMtct(LPVOID wParam)
{
	TRACE0("TMtct Thread Start!\n");
	CSgipServiceDemoDlg *pDlg = (CSgipServiceDemoDlg *)wParam;
	pDlg->ShowRunState("MT性能测试线程开始!");
	
	while (WaitForSingleObject(pDlg->m_hTMTAppExit, 0) != WAIT_OBJECT_0)
	{
		//当smg客户处于momtct模式,使smg处于moct,同时
		//在下面的判断中原来的“1 == pDlg->m_iTestPhase”去掉,
		//就可以完成momt性能测试。不再写使smg处于momtct模式的代码了。
		if(TRUE)//mtct
		{
			SMSSubmit smssubmit;
			if(1 == pDlg->GetSMSSubmit(smssubmit))
			{
				pDlg->m_iEditMTCTRPN ++;
				pDlg->SendMessage(WM_UPDATE_DLGDATA,0,0);

				CString strTemp;
				strTemp.Format("%u%u",smssubmit.ulTimeID,smssubmit.ulSgipSerial);
				pDlg->ShowRunState("Submit:SP(" + smssubmit.strSpNumber + ")ID(" + strTemp + ")No(" + smssubmit.strUserNumber + ")Content(" + smssubmit.strMsgContent + ")");
			}
			else
			{
				Sleep(100);
			}
		}
		else
		{
			Sleep(100);
		}
	}
	TRACE0("TMtct Thread exit!\n");
	SetEvent(pDlg->m_hTMTExit);
	pDlg->ShowRunState("MT性能测试线程退出!");
	return 0;
}

UINT TMoct(LPVOID wParam)
{
	TRACE0("TMoct Thread Start!\n");
	CSgipServiceDemoDlg *pDlg = (CSgipServiceDemoDlg *)wParam;
	pDlg->ShowRunState("MO性能测试线程开始!");
	while (WaitForSingleObject(pDlg->m_hTMOAppExit, 0) != WAIT_OBJECT_0)
	{
		if(2 == pDlg->m_iTestPhase)//moct
		{
			int iSPNPerSecond = pDlg->m_iEditMOCTSPNPerSecond;
			int iSPNMax = pDlg->m_iEditMOCTSPNMax;
			int i,j;
			int iSendOkCount = 0;
			int iSendFailCount = 0;
			for(i = 0; i < iSPNMax;)
			{
				if(FALSE == pDlg->m_bStartTest) break;
				if(FALSE == pDlg->m_bStartMoctTest) break;
				for(j = 0; j < iSPNPerSecond; j++)
				{
					if(FALSE == pDlg->m_bStartTest) break;
					if( i >= iSPNMax) break;
					if(FALSE == pDlg->m_bStartMoctTest) break;
					int iDelResult = pDlg->DeliverOneMsg(pDlg->m_strOrgPhoneNo,
														 pDlg->m_strMsgContent,
														 (unsigned long)i,
														 0,
														 pDlg->m_bWaitResp);
					switch(iDelResult)
					{
					case 0://ok
						iSendOkCount++;
						break;
					case -3://网络连接错误
					case -4://time out
						//break;
						pDlg->SendMessage(WM_USER_REINITSOCKET);
						Sleep(10);
					default://other error
						pDlg->ShowRunState("短消息递送失败,请检查参数配置及网络状况!");
						iSendFailCount++;
						break;
					}
					i++;
					if(iSPNPerSecond <= 50)
						Sleep(1000/iSPNPerSecond -4);
					if(iSPNPerSecond <= 100 && iSPNPerSecond > 50)
						Sleep(700/iSPNPerSecond);
					if(iSPNPerSecond > 100)
						Sleep(500/iSPNPerSecond);
				}
			}

			CString strMsg;
			strMsg.Format("共递送%d条短消息,成功%d条,失败%d条",i,iSendOkCount,iSendFailCount);
			pDlg->ShowRunState(strMsg);
			
			CTime tmEndTime;
			tmEndTime = CTime::GetCurrentTime();
			pDlg->m_strEditMOCTEndTime = tmEndTime.Format("%y-%m-%d %H:%M:%S");
			pDlg->SendMessage(WM_UPDATE_DLGDATA,0,0);
			pDlg->m_iTestPhase = 0;
			pDlg->m_BtnMOCTStop.EnableWindow(FALSE);
			pDlg->m_BtnMOCTStart.EnableWindow();
			pDlg->m_BtnMTCTStart.EnableWindow();
			pDlg->m_BtnMTCTStop.EnableWindow(FALSE);
			pDlg->m_BtnStopTest.EnableWindow();
		}
		else
		{
			Sleep(500);
		}
	}
	TRACE0("TMoct Thread exit!\n");
	SetEvent(pDlg->m_hTMOExit);
	pDlg->ShowRunState("MO性能测试线程退出!");
	return 0;
}

⌨️ 快捷键说明

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