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

📄 cngp2apidemodlg.cpp

📁 cngp的api短信开发包
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	BOOL fSuccess = FALSE;

	config.setConfigKey( "SMG", "smghost", m_sSmgHost);
	config.setConfigKey( "SMG", "loginname", m_sLoginName);
	config.setConfigKey( "SMG", "loginpwd", m_sLoginPwd);
	config.setConfigKey( "SMG", "mtport", (int)m_ushMTPort);
	config.setConfigKey( "SMG", "moport", (int)m_ushMOPort);
	config.setConfigKey( "SMG", "mtandmoport", (int)m_ushMTAndMOPort);
	config.setConfigKey( "SMG", "mtconnections", (int)m_bMTConnections);
	config.setConfigKey( "SMG", "moconnections", (int)m_bMOConnections);
	config.setConfigKey( "SMG", "mtandmoconnections", (int)m_bMTAndMOConnections);
	config.setConfigKey( "SMG", "icpid", m_sICPID);

	config.setConfigKey( "SUBMIT", "subtype", (int)m_bSubType);
	config.setConfigKey( "SUBMIT", "needreport", (int)m_bNeedReport);
	config.setConfigKey( "SUBMIT", "msglevel", (int)m_bMsgLevel);
	config.setConfigKey( "SUBMIT", "serviceid", m_sServiceId);
	config.setConfigKey( "SUBMIT", "feeusertype", (int)m_bFeeUserType);
	config.setConfigKey( "SUBMIT", "feeterminalid", m_sFeeTerminalId);
	config.setConfigKey( "SUBMIT", "msgfmt", (int)m_bMsgFmt);
	config.setConfigKey( "SUBMIT", "feetype", m_sFeeType);
	config.setConfigKey( "SUBMIT", "feecode", m_sFeeCode);
	config.setConfigKey( "SUBMIT", "srcid", m_sSrcId);
	config.setConfigKey( "SUBMIT", "destusertl", (int)m_bDestUserCount);
	config.setConfigKey( "SUBMIT", "destterminalid", m_sDestTerminalId);
	config.setConfigKey( "SUBMIT", "msglength", (int)m_bMsgLen);
	config.setConfigKey( "SUBMIT", "msgcontent", m_sMsgContent);
}

void CCNGP2APIDemoDlg::ShowLog(LPCTSTR psFmt, ...)
{
	char buffer[1024] = "";
	
	SYSTEMTIME	time;
	::GetLocalTime(&time);

	sprintf(buffer, 
		"%02d:%02d:%02d:%03d\t", 
		time.wHour, 
		time.wMinute, 
		time.wSecond, 
		time.wMilliseconds
		);

	va_list arglist;						
	va_start(arglist, psFmt);
	_vsnprintf(buffer + 13, 1024, psFmt, arglist);
	va_end(arglist);

	strcat(buffer, "\r\n");

	int nLen = m_EditOutput.GetWindowTextLength();
	if (nLen >= 20*1024) {
		m_EditOutput.SetWindowText("");
	}
	else {
		m_EditOutput.SetSel(nLen, nLen);
		m_EditOutput.ReplaceSel(buffer);
	}

	return;
}

void CCNGP2APIDemoDlg::RefreshButton()
{
	if (m_fGWConnected) {
		GetDlgItem(IDC_BTN_CONNECT)->EnableWindow(FALSE);
		GetDlgItem(IDC_BTN_SUBMIT)->EnableWindow();
		GetDlgItem(IDC_BTN_CLEAR)->EnableWindow();
	}
	else {
		GetDlgItem(IDC_BTN_CONNECT)->EnableWindow();
		GetDlgItem(IDC_BTN_SUBMIT)->EnableWindow(FALSE);
		GetDlgItem(IDC_BTN_CLEAR)->EnableWindow(FALSE);
	}
}

void CCNGP2APIDemoDlg::OnClose()
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	UpdateData();

	SetConfig();

	if ( client != NULL) {
		delete client;
		client = NULL;
	}

	CDialog::OnClose();
}

void CCNGP2APIDemoDlg::OnBnClickedBtnConnect()
{
	UpdateData();

	// 指定CNGP2API要使用的线程池初始线程数和最大线程数
	client->Initialize(50, 100);
	
	BOOL fMTConnected = FALSE;
	BOOL fMOConnected = FALSE;
	BOOL fMTAndMOConnected = FALSE;

	//	建立发送连接
	if (!m_fGWConnected) {
		int ix = 0;
		fMTConnected = TRUE;
		for (ix = 0; ix < (int)m_bMTConnections; ix++) {
		/*
			CNGPConnection* MakeConnection ( const CString & _smghost, const unsigned short & _smgport, const unsigned char & _smgversion, const CString & _username, const CString & _password, const ConnectionType & _conntype, const int & _nActivetestInterval, const CStr
			*/
			CNGPConnection * connection = client->MakeConnection(
				m_sSmgHost, 
				(const unsigned short)m_ushMTPort, 
				(const unsigned char)CNGP2_VERSION, 
				(const CString)m_sLoginName, 
				(const CString)m_sLoginPwd, 
				e_SendOnly,
				25
				);

			if (connection == NULL || !connection->IsOpened() ) {
				ShowLog("INFO|建立第%d个发送连接失败", ix+1);
				fMTConnected = FALSE;
				break;
			}
			else {
				ShowLog("INFO|建立第%d个发送连接成功", ix+1);
			}
		}

		// 建立接收连接
		if (fMTConnected) {
			int iy = 0;
			fMOConnected = TRUE;
			for (iy = 0; iy < m_bMOConnections; iy++) {
				CNGPConnection * connection = client->MakeConnection(
					m_sSmgHost, 
					(const unsigned short)m_ushMOPort, 
					(const unsigned char)CNGP2_VERSION, 
					(const CString)m_sLoginName, 
					(const CString)m_sLoginPwd, 
					e_RecvOnly,
					25
					);

				if (connection == NULL || !connection->IsOpened() ) {
					ShowLog("INFO|建立第%d个接收连接失败", iy+1);
					fMOConnected = FALSE;
					break;
				}
				else {
					ShowLog("INFO|建立第%d个接收连接成功", iy+1);
				}
			}			
		}

		// 建立收发连接
		if (fMTConnected && fMOConnected) {
			int iz = 0;
			fMTAndMOConnected	= TRUE;
			for (iz = 0; iz < m_bMTAndMOConnections; iz++) {
				CNGPConnection * connection = client->MakeConnection(
					m_sSmgHost, 
					(const unsigned short)m_ushMTAndMOPort, 
					(const unsigned char)CNGP2_VERSION, 
					(const CString)m_sLoginName, 
					(const CString)m_sLoginPwd, 
					e_SendAndRecv,
					25
					);

				if (connection == NULL || !connection->IsOpened() ) {
					ShowLog("ERROR|建立第%d个收发连接失败", iz+1);
					fMTAndMOConnected = FALSE;
					break;
				}
				else {
					ShowLog("INFO|建立第%d个收发连接成功", iz+1);
				}
			}
		}
	}

	m_fGWConnected = fMTConnected && fMOConnected && fMTAndMOConnected;

	RefreshButton();

	if (!m_fGWConnected) {
		// 启动失败记得调用Release释放资源
		client->Release();
		ShowLog("ERROR|网关连接失败;");
	}
	else {
		SetTimer(ID_COUNT_TIMER, 1000, NULL);
		ShowLog("INFO|网关服务启动;");
	}
}

void CCNGP2APIDemoDlg::OnBnClickedBtnSubmit()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData();

	CNGP_SUBMIT		msg;
	ZeroMemory(&msg, sizeof(CNGP_SUBMIT));

	strncpy(msg.sSpid, (const char *)(LPCTSTR)m_sICPID, 10);
	msg.uchSubType = m_bSubType;
	msg.uchNeedReport = m_bNeedReport;
	msg.uchPriority = m_bMsgLevel;
	strncpy(msg.sServiceId, (const char *)(LPCTSTR)m_sServiceId, 10);
	strncpy(msg.sFeeType, (const char *)(LPCTSTR)m_sFeeType, 2);
	msg.uchFeeUserType = m_bFeeUserType;
	strncpy(msg.sFeeCode, (const char *)(LPCTSTR)m_sFeeCode, 6);
	msg.uchMsgFmt = m_bMsgFmt;
	strncpy(msg.sSrcTermId, (const char *)(LPCTSTR)m_sSrcId, 21);
	strncpy(msg.sChargeTermId, (const char *)(LPCTSTR)m_sFeeTerminalId, 21);
	msg.uchDstUsrTl = m_bDestUserCount;
	msg.uchMsgLen = m_bMsgLen;
	strncpy(msg.sMsgContent, (const char *)(LPCTSTR)m_sMsgContent, m_bMsgLen > 254 ? 254 : m_bMsgLen);

	strncpy(msg.sDstTermId, (const char *)(LPCTSTR)m_sDestTerminalId, 21);
	// 开始发送
	int nRetCode = client->Submit(msg);
	if ( nRetCode == e_ERROR_NONOFUSEABLECONNECTION) {
		client->Submit(msg);
	}
}

void CCNGP2APIDemoDlg::OnBnClickedBtnClear()
{
	// TODO: 在此添加控件通知处理程序代码
	client->Release();
	m_fGWConnected = FALSE;
	RefreshButton();
	KillTimer(ID_COUNT_TIMER);
}

void CCNGP2APIDemoDlg::OnEnChangeEditMsgcontent()
{
	// TODO:  如果该控件是 RICHEDIT 控件,则它将不会
	// 发送该通知,除非重写 CDialog::OnInitDialog()
	// 函数并调用 CRichEditCtrl().SetEventMask(),
	// 同时将 ENM_CHANGE 标志“或”运算到掩码中。

	// TODO:  在此添加控件通知处理程序代码
	UpdateData();
	m_bMsgLen = (BYTE)m_sMsgContent.GetLength();
	UpdateData(FALSE);
}

void CCNGP2APIDemoDlg::OnTimer(UINT nIDEvent)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值

	// 定时刷新统计信息
	if (nIDEvent == ID_COUNT_TIMER) {
		UpdateData();
		m_unMTOK				= client->GetSubmitSucceedCount();
		m_unMTFail			= client->GetSubmitFailedCount();
		m_unRespOK			= client->GetRespSucceedCount();
		m_unRespFail		= client->GetRespFailedCount();
		m_unMOCount			= client->GetDeliverCount();
		m_unReportCount = client->GetStatusReportCount();
		UpdateData(FALSE);
	}

	CDialog::OnTimer(nIDEvent);
}

⌨️ 快捷键说明

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