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

📄 cmppgatewaydlg.cpp

📁 本接口是用VC6.0遵循中国移动通信标准CMPP2.0协议开发的短消息网关接口
💻 CPP
字号:
/**
*	文件:	cmppgatewayDlg.cpp
*	作者:	PrinceToad,princetoad@tom.com,http://gmm.nease.net
*	说明:	中国移动CMPP2.0短消息网关开发接口库 示例工程模拟网关文件
*	版本:	1.3
*/

#include "stdafx.h"
#include "cmppgateway.h"
#include "cmppgatewayDlg.h"
#include	"serv.h"

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

extern CLogFile	*log;
extern bool	g_fstop;
extern int g_srvport;
extern CLIENT_CONN	conn_list[255];
extern cmpp_conn	conn;
/////////////////////////////////////////////////////////////////////////////
// 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()

/////////////////////////////////////////////////////////////////////////////
// CCmppgwDlg dialog

CCmppgwDlg::CCmppgwDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CCmppgwDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CCmppgwDlg)
	m_nPort = 0;
	m_sDestAddr = _T("");
	m_sIcpid = _T("");
	m_sMsgcontent = _T("");
	m_nSendtimes = 0;
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CCmppgwDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CCmppgwDlg)
	DDX_Text(pDX, IDC_EDIT_PORT, m_nPort);
	DDV_MinMaxUInt(pDX, m_nPort, 1, 65534);
	DDX_Text(pDX, IDC_EDIT_DESTADDR, m_sDestAddr);
	DDX_Text(pDX, IDC_EDIT_ICPID, m_sIcpid);
	DDX_Text(pDX, IDC_EDIT_MSGCONTENT, m_sMsgcontent);
	DDX_Text(pDX, IDC_EDIT_SENDTIMES, m_nSendtimes);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CCmppgwDlg, CDialog)
	//{{AFX_MSG_MAP(CCmppgwDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BTN_START, OnBtnStart)
	ON_BN_CLICKED(IDC_BTN_STOP, OnBtnStop)
	ON_WM_CLOSE()
	ON_BN_CLICKED(IDC_BTN_EXIT, OnBtnExit)
	ON_BN_CLICKED(IDC_BTN_SEELOG, OnBtnSeelog)
	ON_BN_CLICKED(IDC_BTN_MO, OnBtnMo)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCmppgwDlg message handlers

BOOL CCmppgwDlg::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);
		}
	}

	// 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
	
	log = new CLogFile("cmppgateway.log");
	// TODO: Add extra initialization here
	m_nPort = 7890;
	m_sDestAddr = "13012345678";
	m_sIcpid = "954321";
	m_sMsgcontent = "Test";
	m_nSendtimes = 1;
	GetDlgItem(IDC_BTN_START)->EnableWindow(TRUE);
	GetDlgItem(IDC_BTN_STOP)->EnableWindow(FALSE);
	UpdateData(FALSE);

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

void CCmppgwDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CCmppgwDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CCmppgwDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CCmppgwDlg::OnBtnStart() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
	g_srvport = m_nPort;
	if (!serv_listen())
	{
		MB("Start Listen Failed!");
		return;
	}
	else
	{
		if (!serv_accept())
		{
			MB("Start Accept Failed!");
			return;
		}
		GetDlgItem(IDC_BTN_START)->EnableWindow(FALSE);
		GetDlgItem(IDC_BTN_STOP)->EnableWindow(TRUE);
		g_fstop = false;
//		OnBtnSeelog();
	}
}

void CCmppgwDlg::OnBtnStop() 
{
	// TODO: Add your control notification handler code here
	serv_clean();
	GetDlgItem(IDC_BTN_START)->EnableWindow(TRUE);
	GetDlgItem(IDC_BTN_STOP)->EnableWindow(FALSE);
	g_fstop = true;
}

void CCmppgwDlg::OnClose() 
{
	// TODO: Add your message handler code here and/or call default
	if (log != NULL)
	{
		delete	log;
		log = NULL;
	}

	CDialog::OnClose();
}

void CCmppgwDlg::OnBtnExit() 
{
	if(!g_fstop)
		OnBtnStop();
	CDialog::OnCancel();
}

void CCmppgwDlg::OnBtnSeelog() 
{
	ShellExecute(this->m_hWnd, "open", "tail.exe", "cmppgateway.log", "", SW_SHOW);	
}

void CCmppgwDlg::OnBtnMo() 
{
	// TODO: Add your control notification handler code here
	UpdateData();

	cmpp_status_t	stat;
	cmppg_deliver	cd;
	CString			strout;
	strout.Empty();

	try
	{
		ZeroMemory(&cd, sizeof(cmppg_deliver));
		SOCKET	 hClient = GetFromList(m_sIcpid);
		if (NULL == hClient)
		{
			strout.Format("客户端没有登录:%s!", m_sIcpid);
			AfxMessageBox(strout);
			return;
		}
		else
			conn.hSocket = hClient;
//随便设置deliver包的值		
		strncpy(cd.sDestId, (char*)(LPCTSTR)m_sDestAddr, m_sDestAddr.GetLength() > 11?11:m_sDestAddr.GetLength());
		cd.cMsgLen = m_sMsgcontent.GetLength() > 140?140:m_sMsgcontent.GetLength();
		strncpy(cd.pk_sm.sMsgContent, (char*)(LPCTSTR)m_sMsgcontent, cd.cMsgLen);

		for(UINT i=0; i<m_nSendtimes; i++)
		{
			stat = cmpp_deliver(&conn, &cd);
			if(CMPP_SUCCESS != stat)
			{
				AfxMessageBox("发送失败!");
				break;
			}
			log->Write("成功发送一条MO消息!\n");
		}
	}
	catch(...)
	{
	}

	return;
}

⌨️ 快捷键说明

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