?? sgipapidemodlg.cpp
字號:
// CMPP3APIDemoDlg.cpp : 實現文件
//
#include "stdafx.h"
#include "SGIPAPIDemo.h"
#include "SGIPAPIDemoDlg.h"
#include "config.h"
#include "MySGIPClient.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 定時器ID
const int ID_COUNT_TIMER = 797328;
// 用于應用程序“關于”菜單項的 CAboutDlg 對話框
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// 對話框數據
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 實現
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
// CSGIPAPIDemoDlg 對話框
CSGIPAPIDemoDlg::CSGIPAPIDemoDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSGIPAPIDemoDlg::IDD, pParent)
, m_unMTOK(0)
, m_unMTFail(0)
, m_unRespOK(0)
, m_unRespFail(0)
, m_unMOCount(0)
, m_unReportCount(0)
, m_sSMGHost(_T(""))
, m_shSMGPort(0)
, m_sSMGUserName(_T(""))
, m_sSMGPassword(_T(""))
, m_nSMGMaxConnections(0)
, m_sSPAddr(_T(""))
, m_shSPPort(0)
, m_sSPUsername(_T(""))
, m_sSPPassword(_T(""))
, m_nSPConnections(0)
, m_sCorpID(_T(""))
, m_sNodeID(_T(""))
, m_nInitThreads(0)
, m_nMaxThreads(0)
, submit_spnumber(_T(""))
, submit_chargenumber(_T(""))
, submit_usercount(0)
, submit_usernumber(_T(""))
, submit_servicetype(_T(""))
, submit_feetype(0)
, submit_feevalue(_T(""))
, submit_agentflag(0)
, submit_morelatetomtflag(0)
, submit_reportflag(0)
, submit_msglength(0)
, submit_linkid(_T(""))
, submit_msgcontent(_T(""))
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
client = new MySGIPClient(*this);
m_nGWConnected = -1;
}
void CSGIPAPIDemoDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT_OUTPUT, m_EditOutput);
DDX_Text(pDX, IDC_EDIT_MTOK, m_unMTOK);
DDX_Text(pDX, IDC_EDIT_MTFAIL, m_unMTFail);
DDX_Text(pDX, IDC_EDIT_RESPOK, m_unRespOK);
DDX_Text(pDX, IDC_EDIT_RESPFAIL, m_unRespFail);
DDX_Text(pDX, IDC_EDIT_MOCOUNT, m_unMOCount);
DDX_Text(pDX, IDC_EDIT_REPORTCOUNT, m_unReportCount);
DDX_Text(pDX, IDC_EDIT_SMGHOST, m_sSMGHost);
DDX_Text(pDX, IDC_EDIT_SMGPORT, m_shSMGPort);
DDX_Text(pDX, IDC_EDIT_SMGUSERNAME, m_sSMGUserName);
DDX_Text(pDX, IDC_EDIT_SMGPASSWORD, m_sSMGPassword);
DDX_Text(pDX, IDC_EDIT_SMGMAXCONNECTIONS, m_nSMGMaxConnections);
DDX_Text(pDX, IDC_EDIT_SPADDR, m_sSPAddr);
DDX_Text(pDX, IDC_EDIT_SPPORT, m_shSPPort);
DDX_Text(pDX, IDC_EDIT_SPUSERNAME, m_sSPUsername);
DDX_Text(pDX, IDC_EDIT_SPPASSWORD, m_sSPPassword);
DDX_Text(pDX, IDC_EDIT_SPCONNECTIONS, m_nSPConnections);
DDX_Text(pDX, IDC_EDIT_CORPID, m_sCorpID);
DDX_Text(pDX, IDC_EDIT_NODEID, m_sNodeID);
DDX_Text(pDX, IDC_EDIT_INITTHREADS, m_nInitThreads);
DDX_Text(pDX, IDC_EDIT_MAXTHREAD, m_nMaxThreads);
DDX_Text(pDX, IDC_EDIT_SPNUMBER, submit_spnumber);
DDX_Text(pDX, IDC_EDIT_CHARGENUMBER, submit_chargenumber);
DDX_Text(pDX, IDC_EDIT_USERCOUNT, submit_usercount);
DDX_Text(pDX, IDC_EDIT_USERNUMBER, submit_usernumber);
DDX_Text(pDX, IDC_EDIT_SERVICETYPE, submit_servicetype);
DDX_Text(pDX, IDC_EDIT_FEETYPE, submit_feetype);
DDX_Text(pDX, IDC_EDIT_FEEVALUE, submit_feevalue);
DDX_Text(pDX, IDC_EDIT_AGENTFLAG, submit_agentflag);
DDX_Text(pDX, IDC_EDIT_MORELATETOMTFLAG, submit_morelatetomtflag);
DDX_Text(pDX, IDC_EDIT_REPORTFLAG, submit_reportflag);
DDX_Text(pDX, IDC_EDIT_MSGLENGTH, submit_msglength);
DDX_Text(pDX, IDC_EDIT_LINKID, submit_linkid);
DDX_Text(pDX, IDC_EDIT_MSGCONTENT, submit_msgcontent);
}
BEGIN_MESSAGE_MAP(CSGIPAPIDemoDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_WM_CLOSE()
ON_BN_CLICKED(IDC_BTN_CONNECT, OnBnClickedBtnConnect)
ON_BN_CLICKED(IDC_BTN_SUBMIT, OnBnClickedBtnSubmit)
ON_BN_CLICKED(IDC_BTN_CLEAR, OnBnClickedBtnClear)
ON_EN_CHANGE(IDC_EDIT_MSGCONTENT, OnEnChangeEditMsgcontent)
ON_WM_TIMER()
END_MESSAGE_MAP()
// CCMPP3APIDemoDlg 消息處理程序
BOOL CSGIPAPIDemoDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 將\“關于...\”菜單項添加到系統菜單中。
// IDM_ABOUTBOX 必須在系統命令范圍內。
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);
}
}
// 設置此對話框的圖標。當應用程序主窗口不是對話框時,框架將自動
// 執行此操作
SetIcon(m_hIcon, TRUE); // 設置大圖標
SetIcon(m_hIcon, FALSE); // 設置小圖標
// TODO: 在此添加額外的初始化代碼
RefreshButton();
// 設置允許輸入的消息內容最大長度
CEdit * pEdit = (CEdit*)GetDlgItem(IDC_EDIT_MSGCONTENT);
pEdit->SetLimitText(160);
GetConfig();
return TRUE; // 除非設置了控件的焦點,否則返回 TRUE
}
void CSGIPAPIDemoDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// 如果向對話框添加最小化按鈕,則需要下面的代碼
// 來繪制該圖標。對于使用文檔/視圖模型的 MFC 應用程序,
// 這將由框架自動完成。
void CSGIPAPIDemoDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于繪制的設備上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使圖標在工作矩形中居中
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;
// 繪制圖標
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
//當用戶拖動最小化窗口時系統調用此函數取得光標顯示。
HCURSOR CSGIPAPIDemoDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CSGIPAPIDemoDlg::GetConfig()
{
SMGAppConfig config;
UpdateData();
m_nInitThreads = config.getConfigKey("SYSTEM", "InitWorkThreads", 0);
m_nMaxThreads = config.getConfigKey("SYSTEM", "MaxWorkThreads", 0);
m_sSMGHost = config.getConfigKey("SMG", "smghost", _T(""));
m_shSMGPort = (short)config.getConfigKey("SMG", "smgport", 0);
m_sSMGUserName = config.getConfigKey("SMG", "smgusername", _T(""));
m_sSMGPassword = config.getConfigKey("SMG", "smgpassword", _T(""));
m_nSMGMaxConnections = config.getConfigKey("SMG", "smgmaxconnections", 0);
m_sSPAddr = config.getConfigKey("LOCAL", "sphost", _T(""));
m_shSPPort = (short)config.getConfigKey("LOCAL", "spport", 0);
m_nSPConnections = config.getConfigKey("LOCAL", "spconnections", 0);
m_sSPUsername = config.getConfigKey("LOCAL", "sploginname", _T(""));
m_sSPPassword = config.getConfigKey("LOCAL", "sppassword", _T(""));
m_sCorpID = config.getConfigKey("LOCAL", "spcorpid", _T(""));
m_sNodeID = config.getConfigKey("LOCAL", "spnodeid", _T(""));
submit_spnumber = config.getConfigKey("SUBMIT", "spnumber", _T(""));
submit_chargenumber = config.getConfigKey("SUBMIT", "chargenumber", _T(""));
submit_usercount = config.getConfigKey("SUBMIT", "usercount", 0);
submit_usernumber = config.getConfigKey("SUBMIT", "usernumber", _T(""));
submit_servicetype = config.getConfigKey("SUBMIT", "servicetype", _T(""));
submit_feetype = config.getConfigKey("SUBMIT", "feetype", 0);
submit_feevalue = config.getConfigKey("SUBMIT", "feevalue", _T(""));
submit_agentflag = config.getConfigKey("SUBMIT", "agentflag", 0);
submit_linkid = config.getConfigKey("SUBMIT", "linkid", _T(""));
submit_msgcontent = config.getConfigKey("SUBMIT", "msgcontent", _T(""));
UpdateData(FALSE);
}
void CSGIPAPIDemoDlg::SetConfig()
{
SMGAppConfig config;
UpdateData();
config.setConfigKey("SYSTEM", "InitWorkThreads", m_nInitThreads);
config.setConfigKey("SYSTEM", "MaxWorkThreads", m_nMaxThreads);
config.setConfigKey("SMG", "smghost", m_sSMGHost);
config.setConfigKey("SMG", "smgport", (int)m_shSMGPort);
config.setConfigKey("SMG", "smgusername", m_sSMGUserName);
config.setConfigKey("SMG", "smgpassword", m_sSMGPassword);
config.setConfigKey("SMG", "smgmaxconnections", m_nSMGMaxConnections);
config.setConfigKey("LOCAL", "sphost", m_sSPAddr);
config.setConfigKey("LOCAL", "spport", (int)m_shSPPort);
config.setConfigKey("LOCAL", "spconnections", m_nSPConnections);
config.setConfigKey("LOCAL", "sploginname", m_sSPUsername);
config.setConfigKey("LOCAL", "sppassword", m_sSPPassword);
config.setConfigKey("LOCAL", "spcorpid", m_sCorpID);
config.setConfigKey("LOCAL", "spnodeid", m_sNodeID);
config.setConfigKey("SUBMIT", "spnumber", submit_spnumber);
config.setConfigKey("SUBMIT", "chargenumber", submit_chargenumber);
config.setConfigKey("SUBMIT", "usercount", (int)submit_usercount);
config.setConfigKey("SUBMIT", "usernumber", submit_usernumber);
config.setConfigKey("SUBMIT", "servicetype", submit_servicetype);
config.setConfigKey("SUBMIT", "feetype", (int)submit_feetype);
config.setConfigKey("SUBMIT", "feevalue", submit_feevalue);
config.setConfigKey("SUBMIT", "agentflag", (int)submit_agentflag);
config.setConfigKey("SUBMIT", "linkid", submit_linkid);
config.setConfigKey("SUBMIT", "msgcontent", submit_msgcontent);
}
void CSGIPAPIDemoDlg::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 CSGIPAPIDemoDlg::RefreshButton()
{
if (0 == m_nGWConnected) {
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 CSGIPAPIDemoDlg::OnClose()
{
// TODO: 在此添加消息處理程序代碼和/或調用默認值
UpdateData();
SetConfig();
CDialog::OnClose();
}
void CSGIPAPIDemoDlg::OnBnClickedBtnConnect()
{
UpdateData();
m_nGWConnected = client->Start(
(char *)(const char *)m_sSPAddr,
(int)m_shSPPort,
(char *)(const char *)(LPCTSTR)m_sSMGHost,
(int)m_shSMGPort,
(char *)(const char *)(LPCTSTR)m_sSPUsername,
(char *)(const char *)(LPCTSTR)m_sSPPassword,
1,
(char *)(const char *)(LPCTSTR)m_sNodeID,
m_nSPConnections,
(char *)(const char *)(LPCTSTR)m_sSMGUserName,
(char *)(const char *)(LPCTSTR)m_sSMGPassword,
m_nSMGMaxConnections,
m_nInitThreads,
m_nMaxThreads
);
if (0 != m_nGWConnected) {
// 啟動失敗記得調用Release釋放資源
client->Release();
ShowLog("ERROR|網關連接失敗;");
}
else {
SetTimer(ID_COUNT_TIMER, 1000, NULL);
ShowLog("INFO|網關服務啟動;");
}
RefreshButton();
}
void CSGIPAPIDemoDlg::OnBnClickedBtnSubmit()
{
// TODO: 在此添加控件通知處理程序代碼
UpdateData();
sgipg_submit ss;
ZeroMemory(&ss, sizeof(sgipg_submit));
memcpy(ss.sSpNumber, (const char *)(LPCTSTR)submit_spnumber, submit_spnumber.GetLength()); ///< 接入號
memcpy(ss.sChargeNumber, (const char *)(LPCTSTR)submit_chargenumber, submit_chargenumber.GetLength()); ///< 計費號碼
ss.cUserCount = submit_usercount; ///< 接收消息的用戶手機數量
memcpy(ss.sUserNumber, (const char *)(LPCTSTR)submit_usernumber, submit_usernumber.GetLength()); ///< 用戶手機號
memcpy(ss.sCorpId, (const char *)(LPCTSTR)m_sCorpID, m_sCorpID.GetLength()); ///< SP得企業代碼
memcpy(ss.sServiceType, (const char *)(LPCTSTR)submit_servicetype, submit_servicetype.GetLength()); ///< 業務代碼
ss.cFeeType = submit_feetype;
memcpy(ss.sFeeValue, (const char *)(LPCTSTR)submit_feevalue, submit_feevalue.GetLength());
memcpy(ss.sGivenValue, "000000", 6);
ss.cAgentFlag = submit_agentflag;
ss.cMorelatetoMTFlag = submit_morelatetomtflag;
ss.cPriority = 3;
// expiretime, scheduletime = null
ss.cReportFlag = submit_reportflag;
ss.cTpPid = ss.cUdhi = ss.cMessageType = 0;
ss.cMessageCoding = 15;
ss.nMsgLen = htonl(submit_msgcontent.GetLength());
strcpy((char*)ss.sMsgContent, (const char *)(LPCTSTR)submit_msgcontent);
// 開始發送
unsigned nSeq, nDateTime;
client->Submit(ss, nSeq, nDateTime);
}
void CSGIPAPIDemoDlg::OnBnClickedBtnClear()
{
// TODO: 在此添加控件通知處理程序代碼
client->Release();
//delete client;
//client = NULL;
m_nGWConnected = -1;
RefreshButton();
KillTimer(ID_COUNT_TIMER);
}
void CSGIPAPIDemoDlg::OnEnChangeEditMsgcontent()
{
// TODO: 如果該控件是 RICHEDIT 控件,則它將不會
// 發送該通知,除非重寫 CDialog::OnInitDialog()
// 函數并調用 CRichEditCtrl().SetEventMask(),
// 同時將 ENM_CHANGE 標志“或”運算到掩碼中。
// TODO: 在此添加控件通知處理程序代碼
UpdateData();
submit_msglength = submit_msgcontent.GetLength();
UpdateData(FALSE);
}
void CSGIPAPIDemoDlg::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 + -