📄 cmpp3apidemodlg.cpp
字号:
SMGAppConfig config;
UpdateData();
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("SMG", "isasiainfosmg", (int)m_fAsiaInfoSMG);
config.setConfigKey("SUBMIT", "pktotal", (int)m_bPkTotal);
config.setConfigKey("SUBMIT", "pknumber", (int)m_bPkNumber);
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", "feeterminaltype", (int)m_bFeeTerminalType);
config.setConfigKey("SUBMIT", "tppid", (int)m_bTpPid);
config.setConfigKey("SUBMIT", "tpudhi", (int)m_bTpUdhi);
config.setConfigKey("SUBMIT", "msgfmt", (int)m_bMsgFmt);
config.setConfigKey("SUBMIT", "msgsrc", m_sMsgSrc);
config.setConfigKey("SUBMIT", "feetype", m_sFeeType);
config.setConfigKey("SUBMIT", "feecode", m_sFeeCode);
config.setConfigKey("SUBMIT", "validtime", m_sValidTime);
config.setConfigKey("SUBMIT", "attime", m_sAtTime);
config.setConfigKey("SUBMIT", "srcid", m_sSrcId);
config.setConfigKey("SUBMIT", "destusertl", (int)m_bDestUserCount);
config.setConfigKey("SUBMIT", "destterminalid", m_sDestTerminalId);
config.setConfigKey("SUBMIT", "destterminaltype", (int)m_bDestTerminalType);
config.setConfigKey("SUBMIT", "msglength", (int)m_bMsgLen);
config.setConfigKey("SUBMIT", "linkid", m_sLinkId);
config.setConfigKey("SUBMIT", "msgcontent", m_sMsgContent);
}
void CCMPP3APIDemoDlg::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 CCMPP3APIDemoDlg::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 CCMPP3APIDemoDlg::OnClose()
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
UpdateData();
SetConfig();
CDialog::OnClose();
}
void CCMPP3APIDemoDlg::OnBnClickedBtnConnect()
{
UpdateData();
// 指定CMPP3API要使用的线程池初始线程数和最大线程数
client->Initialize(4, 10);
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++) {
CMPPConnection * connection = client->MakeConnection(
m_sSmgHost,
(const unsigned short)m_ushMTPort,
(const unsigned char)CMPP3_VERSION,
(const CString)m_sLoginName,
(const CString)m_sLoginPwd,
(const CString)m_sICPID,
e_SendOnly,
(const BOOL)m_fAsiaInfoSMG,
(const int)25,
TRUE
);
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++) {
CMPPConnection * connection = client->MakeConnection(
m_sSmgHost,
(const unsigned short)m_ushMOPort,
(const unsigned char)CMPP3_VERSION,
(const CString)m_sLoginName,
(const CString)m_sLoginPwd,
(const CString)m_sICPID,
e_RecvOnly,
(const BOOL)m_fAsiaInfoSMG,
(const int)25,
TRUE
);
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++) {
CMPPConnection * connection = client->MakeConnection(
m_sSmgHost,
(const unsigned short)m_ushMTAndMOPort,
(const unsigned char)CMPP3_VERSION,
(const CString)m_sLoginName,
(const CString)m_sLoginPwd,
(const CString)m_sICPID,
e_SendAndRecv,
(const BOOL)m_fAsiaInfoSMG,
(const int)30,
TRUE
);
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 CCMPP3APIDemoDlg::OnBnClickedBtnSubmit()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData();
CMPP_SUBMIT msg;
ZeroMemory(&msg, sizeof(CMPP_SUBMIT));
msg.nMsgid = 0;
/**
下面注释掉的字段用于业务处理
recid用于唯一标识一条消息,submittimes记录该消息的重发次数,用于重发
可以根据自己的情况赋值
由于submit消息的发送是异步的,所以需要根据recid和SubmitResponse中的seqid对应一条消息
*/
//msg.nonStdMessage.recid =;
//msg.nonStdMessage.submittimes = 0;
strncpy(msg.sAtTime, (const char *)(LPCTSTR)m_sAtTime, 17);
msg.uchDstUsrTl = m_bDestUserCount;
strncpy(msg.sDstTerminalId, (const char *)(LPCTSTR)m_sDestTerminalId, /*32*/LENGTH_OF_MSISDN_IN_MOMT*m_bDestUserCount);
strncpy(msg.sFeeCode, (const char *)(LPCTSTR)m_sFeeCode, 6);
strncpy(msg.sFeeTerminalId, (const char *)(LPCTSTR)m_sFeeTerminalId, /*32*/LENGTH_OF_MSISDN_IN_MOMT);
strncpy(msg.sFeeType, (const char *)(LPCTSTR)m_sFeeType, 2);
strncpy(msg.sLinkId, (const char *)(LPCTSTR)m_sLinkId, 20);
strncpy(msg.sMsgContent, (const char *)(LPCTSTR)m_sMsgContent, m_bMsgLen > 160 ? 160 : m_bMsgLen);
strncpy(msg.sMsgSrc, (const char *)(LPCTSTR)m_sMsgSrc, 6);
strncpy(msg.sServiceId, (const char *)(LPCTSTR)m_sServiceId, 10);
strncpy(msg.sSrcId, (const char *)(LPCTSTR)m_sSrcId, 21);
strncpy(msg.sValidTime, (const char *)(LPCTSTR)m_sValidTime, 17);
msg.uchDestTerminalType = m_bDestTerminalType;
msg.uchDstUsrTl = m_bDestUserCount;
msg.uchFeeTerminalType = m_bFeeTerminalType;
msg.uchFeeUserType = m_bFeeUserType;
msg.uchMsgFmt = m_bMsgFmt;
msg.uchMsgLength = m_bMsgLen;
msg.uchMsgLevel = m_bMsgLevel;
msg.uchPkNumber = m_bPkNumber;
msg.uchPkTotal = m_bPkTotal;
msg.uchRegisteredDelivery = m_bNeedReport;
msg.uchTpPid = m_bTpPid;
msg.uchTpUdhi = m_bTpUdhi;
// 开始发送
client->Submit(msg);
}
void CCMPP3APIDemoDlg::OnBnClickedBtnClear()
{
// TODO: 在此添加控件通知处理程序代码
client->Release();
m_fGWConnected = FALSE;
RefreshButton();
KillTimer(ID_COUNT_TIMER);
}
void CCMPP3APIDemoDlg::OnEnChangeEditMsgcontent()
{
// TODO: 如果该控件是 RICHEDIT 控件,则它将不会
// 发送该通知,除非重写 CDialog::OnInitDialog()
// 函数并调用 CRichEditCtrl().SetEventMask(),
// 同时将 ENM_CHANGE 标志“或”运算到掩码中。
// TODO: 在此添加控件通知处理程序代码
UpdateData();
m_bMsgLen = (BYTE)m_sMsgContent.GetLength();
UpdateData(FALSE);
}
void CCMPP3APIDemoDlg::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 + -