📄 cngp2apidemodlg.cpp
字号:
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 + -