📄 cmppapidemodlg.cpp
字号:
(const CString)m_sICPID,
e_RecvOnly,
(const BOOL)m_fAsiaInfoSMG,
(const int)10,
(const int)1800,
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)CMPP2_VERSION,
(const CString)m_sLoginName,
(const CString)m_sLoginPwd,
(const CString)m_sICPID,
e_SendAndRecv,
(const BOOL)m_fAsiaInfoSMG,
(const int)10,
(const int)1800,
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 CCMPPAPIDemoDlg::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;
//#if defined(_MSC_VER) && _MSC_VER >= 1400
// strncpy_s(msg.sAtTime, 18, (const char *)(LPCTSTR)m_sAtTime, 17);
//#else
// strncpy(msg.sAtTime, (const char *)(LPCTSTR)m_sAtTime, 17);
//#endif
// msg.uchDstUsrTl = m_bDestUserCount;
//
//#if defined(_MSC_VER) && _MSC_VER >= 1400
// strncpy_s(msg.sDstTerminalId, 32, (const char *)(LPCTSTR)m_sDestTerminalId, /*32*/21*m_bDestUserCount);
//#else
// strncpy(msg.sDstTerminalId, (const char *)(LPCTSTR)m_sDestTerminalId, /*32*/21*m_bDestUserCount);
//#endif
//
//#if defined(_MSC_VER) && _MSC_VER >= 1400
// strncpy_s(msg.sFeeCode, 7, (const char *)(LPCTSTR)m_sFeeCode, 6);
//#else
// strncpy(msg.sFeeCode, (const char *)(LPCTSTR)m_sFeeCode, 6);
//#endif
//
//#if defined(_MSC_VER) && _MSC_VER >= 1400
// strncpy_s(msg.sFeeTerminalId, 33, (const char *)(LPCTSTR)m_sFeeTerminalId, /*32*/21);
//#else
// strncpy(msg.sFeeTerminalId, (const char *)(LPCTSTR)m_sFeeTerminalId, /*32*/21);
//#endif
//
//#if defined(_MSC_VER) && _MSC_VER >= 1400
// strncpy_s(msg.sFeeType, 3, (const char *)(LPCTSTR)m_sFeeType, 2);
//#else
// strncpy(msg.sFeeType, (const char *)(LPCTSTR)m_sFeeType, 2);
//#endif
//
// //strncpy(msg.sLinkId, (const char *)(LPCTSTR)m_sLinkId, 20);
//#if defined(_MSC_VER) && _MSC_VER >= 1400
// strncpy_s(msg.sMsgContent, 161, (const char *)(LPCTSTR)m_sMsgContent, m_bMsgLen > 160 ? 160 : m_bMsgLen);
//#else
// strncpy(msg.sMsgContent, (const char *)(LPCTSTR)m_sMsgContent, m_bMsgLen > 160 ? 160 : m_bMsgLen);
//#endif
//
//#if defined(_MSC_VER) && _MSC_VER >= 1400
// strncpy_s(msg.sMsgSrc, 7, (const char *)(LPCTSTR)m_sMsgSrc, 6);
//#else
// strncpy(msg.sMsgSrc, (const char *)(LPCTSTR)m_sMsgSrc, 6);
//#endif
//
//#if defined(_MSC_VER) && _MSC_VER >= 1400
// strncpy_s(msg.sServiceId, 11, (const char *)(LPCTSTR)m_sServiceId, 10);
//#else
// strncpy(msg.sServiceId, (const char *)(LPCTSTR)m_sServiceId, 10);
//#endif
//
//#if defined(_MSC_VER) && _MSC_VER >= 1400
// strncpy_s(msg.sSrcId, 22, (const char *)(LPCTSTR)m_sSrcId, 21);
//#else
// strncpy(msg.sSrcId, (const char *)(LPCTSTR)m_sSrcId, 21);
//#endif
//
//#if defined(_MSC_VER) && _MSC_VER >= 1400
// strncpy_s(msg.sValidTime, 18, (const char *)(LPCTSTR)m_sValidTime, 17);
//#else
// strncpy(msg.sValidTime, (const char *)(LPCTSTR)m_sValidTime, 17);
//#endif
// //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;
//
// int ix = 0;
// for ( ix = 0; ix < sendTimes; ix++ ) {
// // 开始发送
// client->Submit(msg);
// Sleep( sendIntervals);
// }
//}
void CCMPPAPIDemoDlg::SendMsg()
{
CMPP_SUBMIT msg;
ZeroMemory(&msg, sizeof(CMPP_SUBMIT));
msg.nMsgid = 0;
/**
下面注释掉的字段用于业务处理
recid用于唯一标识一条消息,submittimes记录该消息的重发次数,用于重发
可以根据自己的情况赋值
由于submit消息的发送是异步的,所以需要根据recid和SubmitResponse中的seqid对应一条消息
*/
//msg.nonStdMessage.recid =;
//msg.nonStdMessage.submittimes = 0;
#if defined(_MSC_VER) && _MSC_VER >= 1400
strncpy_s(msg.sAtTime, 18, (const char *)(LPCTSTR)m_sAtTime, 17);
#else
strncpy(msg.sAtTime, (const char *)(LPCTSTR)m_sAtTime, 17);
#endif
msg.uchDstUsrTl = m_bDestUserCount;
#if defined(_MSC_VER) && _MSC_VER >= 1400
strncpy_s(msg.sDstTerminalId, 32, (const char *)(LPCTSTR)m_sDestTerminalId, /*32*/21*m_bDestUserCount);
#else
strncpy(msg.sDstTerminalId, (const char *)(LPCTSTR)m_sDestTerminalId, /*32*/21*m_bDestUserCount);
#endif
#if defined(_MSC_VER) && _MSC_VER >= 1400
strncpy_s(msg.sFeeCode, 7, (const char *)(LPCTSTR)m_sFeeCode, 6);
#else
strncpy(msg.sFeeCode, (const char *)(LPCTSTR)m_sFeeCode, 6);
#endif
#if defined(_MSC_VER) && _MSC_VER >= 1400
strncpy_s(msg.sFeeTerminalId, 33, (const char *)(LPCTSTR)m_sFeeTerminalId, /*32*/21);
#else
strncpy(msg.sFeeTerminalId, (const char *)(LPCTSTR)m_sFeeTerminalId, /*32*/21);
#endif
#if defined(_MSC_VER) && _MSC_VER >= 1400
strncpy_s(msg.sFeeType, 3, (const char *)(LPCTSTR)m_sFeeType, 2);
#else
strncpy(msg.sFeeType, (const char *)(LPCTSTR)m_sFeeType, 2);
#endif
//strncpy(msg.sLinkId, (const char *)(LPCTSTR)m_sLinkId, 20);
#if defined(_MSC_VER) && _MSC_VER >= 1400
strncpy_s(msg.sMsgContent, 161, (const char *)(LPCTSTR)m_sMsgContent, m_bMsgLen > 160 ? 160 : m_bMsgLen);
#else
strncpy(msg.sMsgContent, (const char *)(LPCTSTR)m_sMsgContent, m_bMsgLen > 160 ? 160 : m_bMsgLen);
#endif
#if defined(_MSC_VER) && _MSC_VER >= 1400
strncpy_s(msg.sMsgSrc, 7, (const char *)(LPCTSTR)m_sMsgSrc, 6);
#else
strncpy(msg.sMsgSrc, (const char *)(LPCTSTR)m_sMsgSrc, 6);
#endif
#if defined(_MSC_VER) && _MSC_VER >= 1400
strncpy_s(msg.sServiceId, 11, (const char *)(LPCTSTR)m_sServiceId, 10);
#else
strncpy(msg.sServiceId, (const char *)(LPCTSTR)m_sServiceId, 10);
#endif
#if defined(_MSC_VER) && _MSC_VER >= 1400
strncpy_s(msg.sSrcId, 22, (const char *)(LPCTSTR)m_sSrcId, 21);
#else
strncpy(msg.sSrcId, (const char *)(LPCTSTR)m_sSrcId, 21);
#endif
#if defined(_MSC_VER) && _MSC_VER >= 1400
strncpy_s(msg.sValidTime, 18, (const char *)(LPCTSTR)m_sValidTime, 17);
#else
strncpy(msg.sValidTime, (const char *)(LPCTSTR)m_sValidTime, 17);
#endif
//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;
int ix = 0;
for ( ix = 0; ix < sendTimes; ix++ ) {
// 开始发送
client->Submit(msg);
Sleep( sendIntervals);
}
return;
}
void CCMPPAPIDemoDlg::SendLongMsg()
{
int src_len = m_sMsgContent.GetLength();
char * src_gb = (char *)(const char *)(LPCTSTR)m_sMsgContent;
DWORD ret_code = 0;
int msgCount = 0;
///< UCS2缓冲
WCHAR* ucs2_buf = new WCHAR[src_len*2+1];
///< ucs2长度
unsigned long ucs2_len = 0;
memset(ucs2_buf, 0, src_len*2+1);
///< CONVERT to ucs2
ucs2_len = MultiByteToWideChar(
/*CP_ACP*/936,
MB_ERR_INVALID_CHARS,
src_gb,
src_len,
ucs2_buf,
src_len*2+1
);
if (ucs2_len > 0) {
for (int iy=0; iy<ucs2_len; iy++) {
ucs2_buf[iy] = htons(ucs2_buf[iy]);
}
}
else {
ret_code = GetLastError();
}
int maxMessageLen=140;
int msgLength = ucs2_len*2;
int tpUdhi = 1;
int msgFmt = 0x08;
int messageUcs2Count = msgLength/(maxMessageLen-6)+1;
int currentMsgLen = 0;
BYTE * tp_udhiHead = new BYTE[6];
tp_udhiHead[0] = 0x05;
tp_udhiHead[1] = 0x00;
tp_udhiHead[2] = 0x03;
tp_udhiHead[3] = 0x0A;
tp_udhiHead[4] = (BYTE)messageUcs2Count;
tp_udhiHead[5] = 0x01; // 默认第一条
BYTE msgContent[141] = "";
for (int i=0; i<messageUcs2Count; i++) {
memset(msgContent, 0, 141);
tp_udhiHead[5] = (BYTE)(i+1);
memcpy(msgContent, tp_udhiHead, 6);
if (i != messageUcs2Count-1) {
// 不是最后一条
memcpy(msgContent+6, ucs2_buf+i*(maxMessageLen-6), maxMessageLen-6);
currentMsgLen = maxMessageLen;
}
else {
memcpy(msgContent+6, ucs2_buf+i*(maxMessageLen-6), msgLength-i*(maxMessageLen-6));
currentMsgLen = msgLength - i*(maxMessageLen-6);
}
CMPP_SUBMIT msg;
ZeroMemory(&msg, sizeof(CMPP_SUBMIT));
msg.nMsgid = 0;
/**
下面注释掉的字段用于业务处理
recid用于唯一标识一条消息,submittimes记录该消息的重发次数,用于重发
可以根据自己的情况赋值
由于submit消息的发送是异步的,所以需要根据recid和SubmitResponse中的seqid对应一条消息
*/
//msg.nonStdMessage.recid =;
//msg.nonStdMessage.submittimes = 0;
#if defined(_MSC_VER) && _MSC_VER >= 1400
strncpy_s(msg.sAtTime, 18, (const char *)(LPCTSTR)m_sAtTime, 17);
#else
strncpy(msg.sAtTime, (const char *)(LPCTSTR)m_sAtTime, 17);
#endif
msg.uchDstUsrTl = m_bDestUserCount;
#if defined(_MSC_VER) && _MSC_VER >= 1400
strncpy_s(msg.sDstTerminalId, 32, (const char *)(LPCTSTR)m_sDestTerminalId, /*32*/21*m_bDestUserCount);
#else
strncpy(msg.sDstTerminalId, (const char *)(LPCTSTR)m_sDestTerminalId, /*32*/21*m_bDestUserCount);
#endif
#if defined(_MSC_VER) && _MSC_VER >= 1400
strncpy_s(msg.sFeeCode, 7, (const char *)(LPCTSTR)m_sFeeCode, 6);
#else
strncpy(msg.sFeeCode, (const char *)(LPCTSTR)m_sFeeCode, 6);
#endif
#if defined(_MSC_VER) && _MSC_VER >= 1400
strncpy_s(msg.sFeeTerminalId, 33, (const char *)(LPCTSTR)m_sFeeTerminalId, /*32*/21);
#else
strncpy(msg.sFeeTerminalId, (const char *)(LPCTSTR)m_sFeeTerminalId, /*32*/21);
#endif
#if defined(_MSC_VER) && _MSC_VER >= 1400
strncpy_s(msg.sFeeType, 3, (const char *)(LPCTSTR)m_sFeeType, 2);
#else
strncpy(msg.sFeeType, (const char *)(LPCTSTR)m_sFeeType, 2);
#endif
//#if defined(_MSC_VER) && _MSC_VER >= 1400
// strncpy_s(msg.sMsgContent, 161, (const char *)(LPCTSTR)m_sMsgContent, m_bMsgLen > 160 ? 160 : m_bMsgLen);
//#else
// strncpy(msg.sMsgContent, (const char *)(LPCTSTR)m_sMsgContent, m_bMsgLen > 160 ? 160 : m_bMsgLen);
//#endif
memcpy( msg.sMsgContent, msgContent, currentMsgLen);
#if defined(_MSC_VER) && _MSC_VER >= 1400
strncpy_s(msg.sMsgSrc, 7, (const char *)(LPCTSTR)m_sMsgSrc, 6);
#else
strncpy(msg.sMsgSrc, (const char *)(LPCTSTR)m_sMsgSrc, 6);
#endif
#if defined(_MSC_VER) && _MSC_VER >= 1400
strncpy_s(msg.sServiceId, 11, (const char *)(LPCTSTR)m_sServiceId, 10);
#else
strncpy(msg.sServiceId, (const char *)(LPCTSTR)m_sServiceId, 10);
#endif
#if defined(_MSC_VER) && _MSC_VER >= 1400
strncpy_s(msg.sSrcId, 22, (const char *)(LPCTSTR)m_sSrcId, 21);
#else
strncpy(msg.sSrcId, (const char *)(LPCTSTR)m_sSrcId, 21);
#endif
#if defined(_MSC_VER) && _MSC_VER >= 1400
strncpy_s(msg.sValidTime, 18, (const char *)(LPCTSTR)m_sValidTime, 17);
#else
strncpy(msg.sValidTime, (const char *)(LPCTSTR)m_sValidTime, 17);
#endif
//msg.uchDestTerminalType = m_bDestTerminalType;
msg.uchDstUsrTl = m_bDestUserCount;
//msg.uchFeeTerminalType = m_bFeeTerminalType;
msg.uchFeeUserType = m_bFeeUserType;
msg.uchMsgFmt = msgFmt;
msg.uchMsgLength = currentMsgLen;
msg.uchMsgLevel = m_bMsgLevel;
msg.uchPkNumber = i+1;
msg.uchPkTotal = messageUcs2Count;
msg.uchRegisteredDelivery = m_bNeedReport;
msg.uchTpPid = m_bTpPid;
msg.uchTpUdhi = tpUdhi;
int ix = 0;
for ( ix = 0; ix < sendTimes; ix++ ) {
// 开始发送
client->Submit(msg);
Sleep( sendIntervals);
}
}
return;
}
void CCMPPAPIDemoDlg::OnBnClickedBtnSubmit()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData();
if ( m_bMsgLen > 140 ) {
SendLongMsg();
}
else {
SendMsg();
}
}
void CCMPPAPIDemoDlg::OnBnClickedBtnClear()
{
// TODO: 在此添加控件通知处理程序代码
client->Release();
m_fGWConnected = FALSE;
RefreshButton();
KillTimer(ID_COUNT_TIMER);
}
void CCMPPAPIDemoDlg::OnEnChangeEditMsgcontent()
{
// TODO: 如果该控件是 RICHEDIT 控件,则它将不会
// 发送该通知,除非重写 CDialog::OnInitDialog()
// 函数并调用 CRichEditCtrl().SetEventMask(),
// 同时将 ENM_CHANGE 标志“或”运算到掩码中。
// TODO: 在此添加控件通知处理程序代码
UpdateData();
m_bMsgLen = m_sMsgContent.GetLength();
UpdateData(FALSE);
}
void CCMPPAPIDemoDlg::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);
}
void CCMPPAPIDemoDlg::OnBnClickedBtnExit()
{
// TODO: 在此添加控件通知处理程序代码
OnClose();
CDialog::OnOK();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -