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

📄 cmppapidemodlg.cpp

📁 SMAL是short message abstract library的缩写,是由风起水流软件工作室(www.zealware.com)开发的一个支持短信网关系统开发的C++底层抽象接口库
💻 CPP
📖 第 1 页 / 共 2 页
字号:
					(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 + -