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

📄 demodlg.cpp

📁 中国移动短信平台开发接口库
💻 CPP
📖 第 1 页 / 共 4 页
字号:
// demoDlg.cpp : implementation file
//

#include "stdafx.h"
#include "demo.h"
#include "demoDlg.h"

//add by ycl 2001.9.26
#include "CmppDlg.h"
//end by ycl

//add by ycl 2001.9.26
//#include "CmppStatusDlg.h"
//end by ycl

#include "export.h"
//#include "smcmacro.h"

#include "RegKey.h"
#include "resource.h"

#define INITIALTIME			3000
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDemoDlg dialog

CDemoDlg::CDemoDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CDemoDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDemoDlg)
	m_PRI = 0;
	m_system_id = _T("923610");
	m_password = _T("06110");
	m_userdata = _T("短信测试信息");
	m_default_id = 0;
	m_sm_id = 0;
	m_fcs = 0;
	m_orgaddr = _T("06110");
	m_destaddr = _T("13881868232");
	m_schedule = _T("");
	m_expire = _T("");
	m_final = _T("");
	m_status = _T("");
	m_error_code = _T("");
	m_subname = _T("");
	m_subaddr = _T("");
	m_subpassword = _T("");
	m_subid = _T("");
	m_ocos = 10;
	m_tcos = 10;
	m_replaynum = 1;
	m_dir = 0;
	m_begintime = _T("");
	m_finaltime = _T("");
	m_smnum = 0;
	m_len = 100;
	m_protocol = 2;
	m_ip = _T("211.137.85.113");
	m_bAutoAck = FALSE;
	m_DlvSMNum = _T("0");
	m_pid = 0;
	m_RegTime = _T("");
	m_mstype = _T("");
	m_Service = _T("");
	m_bSM = _T("");
	m_TON = _T("");
	m_NPI = _T("");
	m_DCS = _T("8");
	m_port = 7890;
	m_UDHI = 0;
	m_Binary = FALSE;
	m_iSRR = 0;
	m_sServiceType = _T("XW");
	m_sMsgID = _T("");
	m_bSmNumFlag = TRUE;
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	::InitializeCriticalSection(&m_critical);

//	Dlv_SMID = 0;
//	wait_for_ack = FALSE;
	bIsExit = FALSE;

	//by ycl 2001.9.26
	
	m_byPKTotal = 1;
	m_byPKNumber = 1;
	m_byMsgLevel = 0;
	memset(m_sSPID, 0, MAX_SPID_LEN);
	memset(m_sFeeCode, 0, MAX_FEE_CODE_LEN);
	memset(m_sFeeType, 0, MAX_FEE_TYPE_LEN);
	m_byUsrNum = 1;
	memset(m_sDestAddrs, 0, MAX_ADDRS_LEN);
	//end by ycl

	//add by ycl 2001.12.8
	m_nMTTLMsg = 0;
    m_nMTTLusr = 0;
    m_nMTScs = 0;
    m_nMTWT = 0;
    m_nMTFL = 0;
    m_nMOScs = 0;
    m_nMOWT = 0;
    m_nMOFL = 0;
	//end by ycl
    
    // 2002.01.31 hyt add
  	m_byFeeUserType = 0;
	memset(m_sFeeAddr, 0, MAX_ADDR_LEN);
    m_ulSmNum = 0;
    // end add

    // 2002-09-09 hyt add for sgip
    strcpy(m_sGivenValue, "0");
	m_byAgentFlag = 0;
	m_byMoreMTFlag = 2;
	m_byMsgType = 0;
    memset(m_sReserve, 0, sizeof(m_sReserve));
    // end 2002-09-09
}

CDemoDlg::~CDemoDlg()
{
	::DeleteCriticalSection(&m_critical);
	bIsExit = TRUE;
	::SetEvent(m_hWaitEvent);
	if (::WaitForSingleObject(m_hThread,100) != WAIT_OBJECT_0)
		::TerminateThread(m_hThread, -1);

}

void CDemoDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDemoDlg)
	DDX_Control(pDX, IDC_LIST1, m_smidlist);
	DDX_Radio(pDX, IDC_RADIO3, m_PRI);
	DDX_Text(pDX, IDC_EDIT1, m_system_id);
	DDX_Text(pDX, IDC_EDIT2, m_password);
	DDX_Text(pDX, IDC_EDIT3, m_userdata);
	DDX_Text(pDX, IDC_EDIT5, m_default_id);
	DDX_Text(pDX, IDC_EDIT4, m_sm_id);
	DDX_Text(pDX, IDC_EDIT12, m_fcs);
	DDX_Text(pDX, IDC_EDIT13, m_orgaddr);
	DDX_Text(pDX, IDC_EDIT14, m_destaddr);
	DDX_Text(pDX, IDC_EDIT6, m_schedule);
	DDX_Text(pDX, IDC_EDIT7, m_expire);
	DDX_Text(pDX, IDC_EDIT15, m_final);
	DDX_Text(pDX, IDC_EDIT16, m_status);
	DDX_Text(pDX, IDC_EDIT17, m_error_code);
	DDX_Text(pDX, IDC_EDIT8, m_subname);
	DDX_Text(pDX, IDC_EDIT9, m_subaddr);
	DDX_Text(pDX, IDC_EDIT10, m_subpassword);
	DDX_Text(pDX, IDC_EDIT11, m_subid);
	DDX_Text(pDX, IDC_EDIT18, m_ocos);
	DDX_Text(pDX, IDC_EDIT19, m_tcos);
	DDX_Text(pDX, IDC_EDIT20, m_replaynum);
	DDX_Radio(pDX, IDC_RADIO6, m_dir);
	DDX_Text(pDX, IDC_EDIT21, m_begintime);
	DDX_Text(pDX, IDC_EDIT22, m_finaltime);
	DDX_Text(pDX, IDC_EDIT23, m_smnum);
	DDX_Text(pDX, IDC_EDIT25, m_len);
	DDX_Radio(pDX, IDC_RADIO2, m_protocol);
	DDX_CBString(pDX, IDC_COMBO1, m_ip);
	DDX_Check(pDX, IDC_CHECK2, m_bAutoAck);
	DDX_Text(pDX, IDC_STATIC_DLVSM_NUM, m_DlvSMNum);
	DDX_Text(pDX, IDC_EDIT24, m_pid);
	DDX_Text(pDX, IDC_EDIT27, m_RegTime);
	DDX_Text(pDX, IDC_EDIT26, m_mstype);
	DDX_Text(pDX, IDC_EDIT28, m_Service);
	DDX_Text(pDX, IDC_EDIT29, m_bSM);
	DDX_Text(pDX, IDC_EDIT30, m_TON);
	DDX_Text(pDX, IDC_EDIT31, m_NPI);
	DDX_Text(pDX, IDC_EDIT32, m_DCS);
	DDX_Text(pDX, IDC_EDIT33, m_port);
	DDX_Text(pDX, IDC_EDIT34, m_UDHI);
	DDX_Check(pDX, IDC_CHECK1, m_Binary);
	DDX_Text(pDX, IDC_EDIT_SRR, m_iSRR);
	DDX_Text(pDX, IDC_SERVICE_SUBTYPE, m_sServiceType);
	DDV_MaxChars(pDX, m_sServiceType, 10);
	DDX_Text(pDX, IDC_EDIT35, m_sMsgID);
	DDV_MaxChars(pDX, m_sMsgID, 16);
	DDX_Check(pDX, IDC_CHECKSMNUM, m_bSmNumFlag);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CDemoDlg, CDialog)
	ON_WM_CONTEXTMENU()
	//{{AFX_MSG_MAP(CDemoDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_WM_CLOSE()
	ON_BN_CLICKED(IDC_BUTTON1, OnLogin)
	ON_BN_CLICKED(IDC_BUTTON2, OnLogout)
	ON_BN_CLICKED(IDC_BUTTON3, OnSubmitSM)
	ON_BN_CLICKED(IDC_BUTTON7, OnQuerySMDetails)
	ON_BN_CLICKED(IDC_BUTTON5, OnCancelSM)
	ON_BN_CLICKED(IDC_BUTTON4, OnReplaceSM)
	ON_BN_CLICKED(IDC_BUTTON6, OnQueryStatus)
	ON_BN_CLICKED(IDC_BUTTON8, OnAddSub)
	ON_BN_CLICKED(IDC_BUTTON9, OnDelSub)
	ON_BN_CLICKED(IDC_BUTTON10, OnModSub)
	ON_BN_CLICKED(IDC_BUTTON11, OnQuerySub)
	ON_BN_CLICKED(IDC_BUTTON12, OnQueryMsgs)
	ON_LBN_DBLCLK(IDC_LIST1, OnDblclkList1)
	ON_BN_CLICKED(IDC_BUTTON13, OnInitialInterface)
	ON_BN_CLICKED(IDC_BUTTON14, OnGetDeliverSM)
	ON_BN_CLICKED(IDC_CHECK2, OnAutoAck)
	ON_MESSAGE(WM_ADDDLVSMNUM, OnDlvSMNum)
	ON_EN_KILLFOCUS(IDC_EDIT3, OnKillfocusEdit3)
	ON_BN_CLICKED(IDC_BUTTON15, Onvpsubmit)
	ON_BN_CLICKED(IDC_BUTTON16, OnLogoutR)
	ON_BN_CLICKED(IDC_BUTTON18, OnQueryDetailEx)
	ON_BN_CLICKED(IDC_BUTTON17, OnReplaceSMEx)
	ON_BN_CLICKED(IDC_BUTTON19, OnExitInterface)	
	ON_BN_CLICKED(IDC_BUTTON20, OnLoadCmppConfig)
	ON_BN_CLICKED(IDC_BUTTON21, OnCmppQuery)
	ON_BN_CLICKED(IDC_BUTTON22, OnCmppCancel)
	ON_COMMAND(ID_CLEAR, OnClear)
	ON_BN_CLICKED(IDC_CHECKSMNUM, OnChecksmnum)
	ON_COMMAND(ID_MENUITEM_About, OnMENUITEMAbout)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDemoDlg message handlers

BOOL CDemoDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}

		pSysMenu->EnableMenuItem(SC_MAXIMIZE, MF_DISABLED|MF_GRAYED);
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	UpdateData(FALSE);

	DWORD id;
	m_hThread = ::CreateThread(NULL, 0, DSMThread, this, 0,&id);
	m_hWaitEvent = ::CreateEvent(NULL, FALSE, FALSE, NULL);

	LoadRegKey();
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CDemoDlg::LoadRegKey()
{
	CNewRegKey hKey;
	HKEY key = HKEY_USERS;
	CString Path = DEFAULT_REGKEY;
	char szIPAddr[300];
	char szValueName[20];
	DWORD dwIndex = 0;
	DWORD dwType;
	DWORD dwNameSize = 20, dwDataSize = 300;

	CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO1);
	//pComboBox->AddString("129.9.123.8");
	//pComboBox->AddString("10.108.19.169");

	if(hKey.Open(key,Path) == ERROR_SUCCESS)
	{
		LONG lRet = RegEnumValue(HKEY(hKey), dwIndex, szValueName, &dwNameSize, 
			NULL, &dwType, (unsigned char*)szIPAddr, &dwDataSize); 
 
		while (lRet == ERROR_SUCCESS)
		{
			if (dwType == REG_SZ)
			{
				pComboBox->AddString(szIPAddr);
			};
			
			dwIndex ++;
			dwNameSize = 20;
			dwDataSize = 300;
			lRet = RegEnumValue(HKEY(hKey), dwIndex, szValueName, &dwNameSize, 
			NULL, &dwType, (unsigned char*)szIPAddr, &dwDataSize); 
		};

		hKey.Close();
	}

}

void CDemoDlg::SaveRegKey()
{
	CNewRegKey hKey ;
	HKEY key = HKEY_USERS;
	CString Path = DEFAULT_REGKEY;
	CString cc;

	CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO1);
	int iCount = pComboBox->GetCount();
	CString Item;
	CString ValueName;

	if(hKey.Open(key,Path) == ERROR_SUCCESS)
	{
		for (int i=0; i < iCount; i++)
		{
			pComboBox->GetLBText(i, Item);
			ValueName.Format("%d", i);
			if (Item.IsEmpty()) continue;
			hKey.Write(ValueName, (LPCTSTR)Item);
		}
		
		hKey.Close();
	}
}

DWORD WINAPI CDemoDlg::DSMThread(LPVOID lparam)
{
	CDemoDlg* p = (CDemoDlg*) lparam;
	HWND handle = p->GetSafeHwnd();
	while(TRUE)
	{
		if (!p->m_bAutoAck)
			WaitForSingleObject(p->m_hWaitEvent, INFINITE);
		if (p->bIsExit) break;
		if (HasDeliverMessage(500) != 0)
		{
			if (!p->m_bAutoAck) 
				AfxMessageBox("No Deliver SM!");
			else
				Sleep(500);
			continue;
		};
		ULONG sm_ID;
		unsigned char DestTON, DestNPI, OrgTON, OrgNPI, PRI, PID, DCS;
		char DestAddr[MAX_ADDR_LEN];
		memset(DestAddr, 0, MAX_ADDR_LEN);
		char OrgAddr[MAX_ADDR_LEN];
		memset(OrgAddr, 0, MAX_ADDR_LEN);
		char TimeStamp[MAX_TIMESTAMP_LEN];
		memset(TimeStamp, 0, MAX_TIMESTAMP_LEN);
		char UserData[MAX_UD_LEN];
		memset(UserData, 0, MAX_UD_LEN);
		unsigned char MsgID[23];
		memset(MsgID, 0, 23);
		char sSubmitdate[MAX_SUBMIT_TIME_LEN+1];
		memset(sSubmitdate, 0, MAX_SUBMIT_TIME_LEN+1);
		char sDonedate[MAX_DONE_TIME_LEN+1];
		memset(sDonedate, 0, MAX_DONE_TIME_LEN+1);
		char sStatus[MAX_STATE_LEN+1];
		memset(sStatus, 0, MAX_STATE_LEN+1);
		int iRet;
        unsigned char RP;
        unsigned char UDHI;
        unsigned long UDLen;
        unsigned char StatusReport = 0;
        /*
		iRet = GetDeliverSM(&sm_ID, &DestTON, &DestNPI, DestAddr, &OrgTON, &OrgNPI,
				OrgAddr, &PRI, &PID, &DCS, TimeStamp, UserData);*/
        if(p->m_protocol == 2)
		{
			iRet = GetDeliverSMExExEx(&sm_ID, &DestTON, &DestNPI, DestAddr, &OrgTON,
				&OrgNPI, OrgAddr, &PRI, &RP, &UDHI, &PID, &DCS, TimeStamp, &UDLen, UserData, 
				&StatusReport, MsgID, sSubmitdate, sDonedate, sStatus);

			CString str;
			char errstr[200];
			switch(iRet)
			{
			case E_SUCCESS:
				if (!p->m_bAutoAck) 
				{
					str.Format("接收到Deliver消息\n"		
						"源地址 = %s\n"
						"目标地址 = %s\n"
						"DCS = 0X%x\n"
						"PRI = %d\n"	
						"UDLen = %d\n"
						"PID = 0x%x\n"
						"UDHI = %d\n"
						"TimeStamp = %s\n"
						"正文 = %s\n"
						"状态报告标志 = %d\n"
						"MsgID = %s\n"
						"Submit date = %s\n"
						"done date = %s\n"
						"stat = %s",
						OrgAddr, DestAddr, DCS,
						PRI, UDLen, PID, UDHI, TimeStamp,
						UserData, StatusReport, 
						MsgID, sSubmitdate, 
						sDonedate, sStatus);
					
					AfxMessageBox(str);
				};
				::PostMessage(handle, WM_ADDDLVSMNUM, 1, 0);
				
				break;
				
			default:
				if (GetErrorString(iRet, 200, errstr) > 0)
					AfxMessageBox(errstr);
			};
		}
		// beging 2002-10-14 by cfk for sgip
        else if(3 == p->m_protocol)
		{
            CString str;
           

            ULONG ulCommandID;
			ULONG ulNodeNum;
			ULONG ulTime; 
			ULONG ulSequenceID;
            char  sUserNumber[MAX_ADDR_LEN];
			char  sSPNumber[MAX_ADDR_LEN];
			unsigned char byPID;
			unsigned char byUDHI;
			unsigned char byMsgCoding;
			ULONG ulMsgLen;			ULONG ulOrgNodeNum;
			ULONG ulOrgTime;
			ULONG ulOrgSeqID;

            unsigned char byReporttype;
			unsigned char byState;
			unsigned char byErrCode;
			unsigned char byUserCondition;

			unsigned char byAckResult;
			byAckResult= atoi(p->m_error_code);

			char sReserve[MAX_RESERVE_LEN];
			memset(sUserNumber, 0, MAX_ADDR_LEN);
			memset(sSPNumber, 0, MAX_ADDR_LEN);
			memset(sReserve, 0, MAX_RESERVE_LEN);
			iRet = SgipGetSM(&ulCommandID,
                             &ulNodeNum,
							 &ulTime, 
							 &ulSequenceID,   // 消息序列号
                             sUserNumber,           //deliver 时发送短消息的手机号,report消息时接收消息手机号
						     sSPNumber,	           // 接收该短消息的短消息接入码
							 &byPID,          //协议类型
							 &byUDHI,         //协议类型 UDHI
							 &byMsgCoding,    //编码格式
							 &ulMsgLen,       //消息长度
							 UserData,           //n内容              
                             &ulOrgNodeNum,
							 &ulOrgTime, 
							 &ulOrgSeqID,   //report消息消息序列号
							 &byReporttype,      // Report命令类型
	                         &byState,           // 短消息执行状态
							 &byErrCode,         //错误码值
							 &byUserCondition,         
	                         sReserve,
							 byAckResult);
			char errstr[200];
			switch(iRet)
			{
			case E_SUCCESS:

⌨️ 快捷键说明

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