sgipservicedemodlg.cpp

来自「1、自己编写的遵循SGIP1.1的短信网关模拟程序。仅供测试、学习。 2、该程」· C++ 代码 · 共 677 行 · 第 1/2 页

CPP
677
字号

				m_lstrunstate.InsertItem(0, strTime);
				m_lstrunstate.SetItemText(0, 1, strContent);

				int iCount = m_lstrunstate.GetItemCount();
				if (iCount > 200)
					m_lstrunstate.DeleteItem(iCount-1);

				singleLock.Unlock();
			}
		}
		else
		{//called by main thread
			m_lstrunstate.InsertItem(0, strTime);
			m_lstrunstate.SetItemText(0, 1, strContent);

			int iCount = m_lstrunstate.GetItemCount();
			if (iCount > 200)
			m_lstrunstate.DeleteItem(iCount-1);
		}
	}

	if(m_bLogState)
		m_logFile.WriteLog(strContent);
}

void CSgipServiceDemoDlg::OnBtnStarttest() 
{
	// TODO: Add your control notification handler code here
	m_bStartTest = TRUE;
	m_BtnStartTest.EnableWindow(FALSE);
	m_BtnConfig.EnableWindow(FALSE);
	///////////////////
	t_INIT_DEF  ini_def;
	ini_def.iLocalLisPort = m_iLocalLisPort;
	ini_def.strLocalPwd = m_strLocalPwd;
	ini_def.strLocalUserName = m_strLocalUserName;
	ini_def.strServerIP = m_strServerIP;
	ini_def.strServerPwd = m_strServerPwd;
	ini_def.iServerLisPort = m_iServerLisPort;
	ini_def.strServerUserName = m_strServerUserName;
	ini_def.iSPNumber = m_iSPNumber;
	ini_def.OnSMSSubmit = Callback_OnSMSSubmit;

	m_SocketRes.InitSocket(ini_def);
	//////////////////

	ResetEvent(m_hTMTAppExit);
	ResetEvent(m_hTMTExit);
	ResetEvent(m_hTMOAppExit);
	ResetEvent(m_hTMOExit);

	ShowRunState("程序启动", 0);

	AfxBeginThread(TMtct,this);
	AfxBeginThread(TMoct,this);

	m_iTestPhase = 0;
	m_BtnMOCTStart.EnableWindow(TRUE);
	m_BtnMTCTStart.EnableWindow(TRUE);
	m_BtnStopTest.EnableWindow(TRUE);
}

void CSgipServiceDemoDlg::OnBtnMtctstart() 
{
	// TODO: Add your control notification handler code here
	CTime tmBeginTime;
	tmBeginTime = CTime::GetCurrentTime();
	m_strEditMTCTBeginTime = tmBeginTime.Format("%y-%m-%d %H:%M:%S");
	UpdateData(FALSE);
	m_iTestPhase = 1;
	m_iEditMTCTRPN = 0;
	m_strEditMTCTEndTime = "";
	UpdateData(FALSE);
	m_BtnMOCTStop.EnableWindow(FALSE);
	m_BtnMOCTStart.EnableWindow(FALSE);
	m_BtnMTCTStart.EnableWindow(FALSE);		
	m_BtnMTCTStop.EnableWindow();
	m_BtnStopTest.EnableWindow(FALSE);
}

void CSgipServiceDemoDlg::OnBtnMoctstart() 
{
	// TODO: Add your control notification handler code here

	m_bStartMoctTest = TRUE;
	if(!UpdateData(TRUE)) return;
	CTime tmBeginTime;
	tmBeginTime = CTime::GetCurrentTime();
	m_strEditMOCTBeginTime = tmBeginTime.Format("%y-%m-%d %H:%M:%S");
	UpdateData(FALSE);
	m_iTestPhase = 2;
	m_BtnMOCTStop.EnableWindow();
	m_BtnMOCTStart.EnableWindow(FALSE);
	m_BtnMTCTStart.EnableWindow(FALSE);
	m_BtnMTCTStop.EnableWindow(FALSE);
	m_BtnStopTest.EnableWindow(FALSE);
}

void CSgipServiceDemoDlg::OnBtnMtctstop() 
{
	// TODO: Add your control notification handler code here
	CTime tmEndTime;
	tmEndTime = CTime::GetCurrentTime();
	m_strEditMTCTEndTime = tmEndTime.Format("%y-%m-%d %H:%M:%S");
	UpdateData(FALSE);
	m_iTestPhase = 0;
	m_BtnMOCTStop.EnableWindow(FALSE);
	m_BtnMOCTStart.EnableWindow();
	m_BtnMTCTStart.EnableWindow();
	m_BtnMTCTStop.EnableWindow(FALSE);
	m_BtnStopTest.EnableWindow();
}

void CSgipServiceDemoDlg::OnBtnMoctstop() 
{
	// TODO: Add your control notification handler code here
	m_BtnMTCTStop.EnableWindow(FALSE);
	m_bStartMoctTest = FALSE;
}

void CSgipServiceDemoDlg::OnBtnConfig() 
{
	// TODO: Add your control notification handler code here
	ReadConfigInfo();

	CDlgConfig dlgConfig;
	dlgConfig.m_strOrgPhoneNo = m_strOrgPhoneNo;
	dlgConfig.m_iLocalLisPort = m_iLocalLisPort;
	dlgConfig.m_strLocalPwd = m_strLocalPwd;
	dlgConfig.m_strLocalUserName = m_strLocalUserName;
	dlgConfig.m_strMsgContent = m_strMsgContent;
	dlgConfig.m_iMsgFmt = m_iMsgFmt;
	dlgConfig.m_strServerIP = m_strServerIP;
	dlgConfig.m_strServerPwd = m_strServerPwd;
	dlgConfig.m_iServerLisPort = m_iServerLisPort;
	dlgConfig.m_strServerUserName = m_strServerUserName;
	dlgConfig.m_iSPNumber = m_iSPNumber;

	if(IDOK == dlgConfig.DoModal())
	{
		m_strOrgPhoneNo = dlgConfig.m_strOrgPhoneNo;
		m_iLocalLisPort = dlgConfig.m_iLocalLisPort;
		m_strLocalPwd = dlgConfig.m_strLocalPwd;
		m_strLocalUserName = dlgConfig.m_strLocalUserName;
		m_strMsgContent = dlgConfig.m_strMsgContent;
		m_iMsgFmt = dlgConfig.m_iMsgFmt;
		m_strServerIP = dlgConfig.m_strServerIP;
		m_strServerPwd = dlgConfig.m_strServerPwd;
		m_iServerLisPort = dlgConfig.m_iServerLisPort;
		m_strServerUserName = dlgConfig.m_strServerUserName;
		m_iSPNumber = dlgConfig.m_iSPNumber;

		if(0 != WriteConfigInfo())
			ShowRunState("配置信息写入配置文件时发生错误!", 0);
		else
			ShowRunState("成功将配置信息写入配置文件!", 0);
	}
}

void CSgipServiceDemoDlg::OnBtnStoptest() 
{
	m_bStartTest = FALSE;
	m_BtnMOCTStart.EnableWindow(FALSE);
	m_BtnMOCTStop.EnableWindow(FALSE);
	m_BtnMTCTStart.EnableWindow(FALSE);	
	m_BtnMTCTStop.EnableWindow(FALSE);	
	m_BtnStopTest.EnableWindow(FALSE);

	TRACE("OnBtnStoptest()(let all the worker threads exit)!\n");
	if(m_iTestPhase >= 0)
	{
		SetEvent(m_hTMTAppExit);
		SetEvent(m_hTMOAppExit);
		while (WaitForSingleObject(m_hTMTExit, 0) != WAIT_OBJECT_0)
		{
			Sleep(100);
		}

		while (WaitForSingleObject(m_hTMOExit, 0) != WAIT_OBJECT_0)
		{
			Sleep(100);
		}

	}
	TRACE("OnBtnStoptest()(all the worker threads have exited)!\n");

	m_SocketRes.ExitSocket();

	m_iTestPhase = -1;

	m_BtnStartTest.EnableWindow();
	m_BtnConfig.EnableWindow();
}

void CSgipServiceDemoDlg::OnCancel() 
{
	// TODO: Add extra cleanup here
	if(m_iTestPhase > 0)
	{
		MessageBox("请先停止任何测试再退出!" , "提示");
		return;
	}
	if(IDOK == MessageBox("真的要退出吗?", "退出", MB_OKCANCEL))
	{	
		OnBtnStoptest();

		if (m_hTMTAppExit != NULL)
			::CloseHandle(m_hTMTAppExit);
		if (m_hTMTExit != NULL)
			::CloseHandle(m_hTMTExit);

		if (m_hTMOAppExit != NULL)
			::CloseHandle(m_hTMOAppExit);
		if (m_hTMOExit != NULL)
			::CloseHandle(m_hTMOExit);

			CDialog::OnCancel();	
	}
}

void CSgipServiceDemoDlg::OnCheckViewstate() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
}

void CSgipServiceDemoDlg::OnCheckLogstate() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);	
}

void CSgipServiceDemoDlg::OnCheckWaitresp() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
}

int CSgipServiceDemoDlg::Callback_OnSMSSubmit(unsigned long ulTimeID, 
		               unsigned long ulSgipSerial,
					   CString strSpNumber,
					   BYTE UserCount,
					   CString strUserNumber,
					   CString strCorpID,
					   CString strServiceType,
					   BYTE FeeType,
					   CString strFeeValue,
					   CString strGivenValue,
					   BYTE AgentFlag,
					   BYTE MorelateoMTFlag,
					   BYTE Priority,
					   CString strExpireTime,
					   CString strScheduleTime,
					   BYTE ReportFlag,
					   BYTE TP_pid,
					   BYTE TP_udhi,
					   BYTE MessageCoding,
					   BYTE MessageType,
					   unsigned long ulMessageLength,
					   CString strMsgContent)
{
	int iRet = 0;
	CSingleLock singleLock(&m_csSMSSubmit);
	if(singleLock.Lock()&&singleLock.IsLocked())
	{
		SMSSubmit smssubmit;
		smssubmit.ulTimeID = ulTimeID;
		smssubmit.ulSgipSerial = ulSgipSerial;
		smssubmit.strSpNumber = strSpNumber;
		smssubmit.UserCount = UserCount;
		smssubmit.strUserNumber = strUserNumber;
		smssubmit.strCorpID = strCorpID;
		smssubmit.strServiceType = strServiceType;
		smssubmit.FeeType = FeeType;
		smssubmit.strFeeValue = strFeeValue;
		smssubmit.strGivenValue = strGivenValue;
		smssubmit.AgentFlag = AgentFlag;
		smssubmit.MorelateoMTFlag = MorelateoMTFlag;
		smssubmit.Priority = Priority;
		smssubmit.strExpireTime = strExpireTime;
		smssubmit.strScheduleTime = strScheduleTime;
		smssubmit.ReportFlag = ReportFlag;
		smssubmit.TP_pid = TP_pid;
		smssubmit.TP_udhi = TP_udhi;
		smssubmit.MessageCoding = MessageCoding;
		smssubmit.MessageType = MessageType;
		smssubmit.ulMessageLength = ulMessageLength;
		smssubmit.strMsgContent = strMsgContent;

		POSITION pos = m_SMSSubmitList.AddHead(smssubmit);
		singleLock.Unlock();
	}
	else
	{
		iRet = -1;
	}
	return iRet;
}

//retvalue: -1:some errors
//          0:get nothing
//          1:get one!
int CSgipServiceDemoDlg::GetSMSSubmit(SMSSubmit &smssubmit)
{
	int iRet = 0;

	CSingleLock singleLock(&m_csSMSSubmit);
	if(singleLock.Lock()&&singleLock.IsLocked())
	{
		if(m_SMSSubmitList.GetCount() <= 0)
		{
			iRet = 0;
			singleLock.Unlock();
			return iRet;
		}
		smssubmit = m_SMSSubmitList.RemoveTail();
		iRet = 1;
		singleLock.Unlock();
	}
	else
	{
		iRet = -1;
	}
	return iRet;
}


int CSgipServiceDemoDlg::DeliverOneMsg(CString strUserNum, CString strContent, unsigned long ulSgipSerialNo, int iMsgCoding,  BOOL bWaitResp)
{
	return m_SocketRes.DeliverOneMsg(strUserNum, 
									 strContent, 
									 ulSgipSerialNo,
									 iMsgCoding,
									 bWaitResp);
}

⌨️ 快捷键说明

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