?? cmppapi_test.cpp
字號(hào):
// cmppapi_test.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
//包含需要的文件.
#include "md5.h"
#include "cmpp.h"
#pragma comment(lib, "cmppapi.lib")
#define CMPP_IMPORT
//用一全局變量記錄SubmitResp中的MsgId,用于測(cè)試Cancel命令.
unsigned _int64 g_nMsgid = 0;
CMPP_LINKID g_stLinkId;
void LogWrite(LPCTSTR sLogItem, ...)
{
char buffer[1024];
ZeroMemory(buffer, 1024);
va_list arglist;
va_start( arglist, sLogItem );
_vsnprintf( buffer, 1024, sLogItem, arglist );
va_end(arglist);
printf(buffer);
}
void LogHex(CString szpre, char *msgContent, int nSize)
{
int ix = 0;
CString strOut;
CString strsingle;
strOut.Empty();
strsingle.Empty();
if ( !AfxIsValidAddress(msgContent, nSize) )
{
printf("輸入?yún)?shù)無(wú)效(LogHex)\n");
return;
}
try
{
if (nSize>1000) nSize = 1000;
printf( szpre );
while(ix<nSize)
{
strsingle.Format("%02x ", (unsigned char)msgContent[ix++]);
strOut += strsingle;
}
strOut += "\n";
printf( strOut );
}
catch(...)
{
printf("LogHex失敗.\n");
}
return;
}
void OnSmgMsg(CMPP_SMGTOSP css)
{
printf("這是消息處理函數(shù)打印出來(lái)的:**smg msg,len = %d, cmd = 0x%08x, seq = %d**\n", \
css.pk_head.nTotalLength, css.pk_head.nCommandId, css.pk_head.nSeqId);
if (css.pk_head.nCommandId == 0x80000004) {
g_nMsgid = css.pk_body.pk_submitresp.nMsgid;
printf("Submit Response, Result:%d.\n", css.pk_body.pk_submitresp.nResult);
}
else if (css.pk_head.nCommandId == 0x00000005) {
printf("Deliver Msg, len:%d, content:%s, msgfmt:%d, msisdn:%s, linkid:%s %s %d.\n", \
css.pk_body.pk_deliver.uchMsglength, css.pk_body.pk_deliver.MO_Msg_Content.sMsgcontent, \
css.pk_body.pk_deliver.uchMsgfmt, css.pk_body.pk_deliver.sSrcterminalid, \
GetSubStr(css.pk_body.pk_deliver.stLinkid.sMiscid, 4), GetSubStr(css.pk_body.pk_deliver.stLinkid.sDateTime, 12), css.pk_body.pk_deliver.stLinkid.nSeqId);
memcpy(&g_stLinkId, &css.pk_body.pk_deliver.stLinkid, 20);
if (css.pk_body.pk_deliver.uchRegisteredDelivery == 1) {
LogHex("狀態(tài)報(bào)告(stat):", css.pk_body.pk_deliver.MO_Msg_Content.csr.sStat, 7);
}
}
return;
}
void OutProgramInfo()
{
printf("\n*****************************************************************************\n");
printf("**軟件名稱 - <<中國(guó)移動(dòng)通信CMPP3.0短消息網(wǎng)關(guān)開(kāi)發(fā)接口庫(kù)>> V3.01 客戶端例程.\n");
printf("**作者主頁(yè) - http://www.zealware.com\n");
printf("**聯(lián)系方式 - Email:princetoad@zealware.com\n");
printf("**授權(quán)方式 - Used Free,SourceCode On Sale.\n");
printf("**********************Published By PrinceToad Jul.04.04.*********************\n\n");
}
//標(biāo)準(zhǔn)cmpp方式,MOMT同一連接的演示例程.
int main(int argc, char* argv[])
{
int nRetCode = 0;
unsigned int nSeq = 0;
OutProgramInfo();
CCmppClient cmpp;
printf("Press Any To Start CmppClient.\n");
system("pause");
ZeroMemory(&g_stLinkId, sizeof(CMPP_LINKID));
//1.啟動(dòng)CMPPCLIENT模塊.
//參數(shù)的含義(具體可以參考使用手冊(cè)):網(wǎng)關(guān)地址,網(wǎng)關(guān)端口,登陸用戶名,口令,版本號(hào)(最好填0x12),網(wǎng)關(guān)連接類型.
//網(wǎng)關(guān)連接類型(0:標(biāo)準(zhǔn)單連接cmpp方式,如思特奇,華為,標(biāo)準(zhǔn)東軟,1:亞信雙連接,2:清華聲訊雙端口)
//本地測(cè)試(由于眾所周知的原因,下面真實(shí)網(wǎng)關(guān)的IP,用戶名口令都被屏蔽了,用戶可以根據(jù)自己的參數(shù)進(jìn)行修改.)
// nRetCode = cmpp.Start("127.0.0.1", 7890, "901234", "1234", 0x30, 10, OnSmgMsg, 0, LogWrite);
//連接思特奇
// nRetCode = cmpp.Start("127.0.0.1", 7890, "901234", "1234", 0x30, 10, OnSmgMsg, 0, LogWrite);
//連接華為
// nRetCode = cmpp.Start("127.0.0.1", 7890, "901234", "1234", 0x30, 10, OnSmgMsg, 0, LogWrite);
//連接?xùn)|軟(標(biāo)準(zhǔn))
// nRetCode = cmpp.Start("127.0.0.1", 7890, "901234", "1234", 0x30, 10, OnSmgMsg, 0, LogWrite);
//連接亞信
nRetCode = cmpp.Start("127.0.0.1", 7890, "901234", "1234", 0x30, 10, OnSmgMsg, 1, LogWrite);
//連接清華聲訊(需要在調(diào)用Start函數(shù)之前調(diào)用SetDoublePort函數(shù)設(shè)定MOMT端口號(hào))
// cmpp.SetDoublePort(7910, 7890);
// nRetCode = cmpp.Start("127.0.0.1", 7890, "901234", "1234", 0x30, 10, OnSmgMsg, 2, LogWrite);
if (0 != nRetCode) {
printf("CmppClient Start Failed With Error: %d.\n", nRetCode);
system("pause");
return nRetCode;
}
else {
printf("CmppClient Module Start Success,Press Any To Test Submit Command.\n");
system("pause");
printf("\n");
}
//2.測(cè)試SUBMIT命令.
//submit的各參數(shù)與cmpp3.0中的submit包內(nèi)容相對(duì)應(yīng).
//這里只負(fù)責(zé)把submit包發(fā)出去,不負(fù)責(zé)接收submitresp以及可能要求的狀態(tài)報(bào)告,
//submitresp包和狀態(tài)報(bào)告均須在OnSmgMsg函數(shù)中處理.
//得到submit包的流水號(hào),通過(guò)與submitresp的流水號(hào)比較,得到submit包的MsgId.
//與狀態(tài)報(bào)告的MsgId比較可以知道此條消息是否已經(jīng)發(fā)到用戶手上.
nSeq = cmpp.GetSeqId();
// int Submit(unsigned _int64 nMsgId, unsigned char uchPKtotal, unsigned char uchPKnumber, \
// unsigned char uchNeedreport, unsigned char uchMsglevel, char *pchServiceid, \
// unsigned char uchFeeusertype, char *pchFeeterminalid, unsigned char uchFeeterminaltype, \
// unsigned char uchTppid, unsigned char uchTpudhi, unsigned char uchMsgfmt, \
// char *pchMsgsrc, char *pchFeetype, char *pchFeecode, char *pchValidtime, char *pchAttime, \
// char *pchSrcid, unsigned char uchDestusrtl, char *pchDestterminalid, unsigned char uchDestterminaltype, \
// unsigned char uchMsglen, char *pchMsgcontent, CMPP_LINKID *stLinkid);
nRetCode = cmpp.Submit(0, 1, 1, \
1, 3, "-DB", \
0, NULL, 0, \
0, 0, 15, \
"901234", "02", "000010", NULL, NULL, \
"4022", 1, "13910273000", 0, \
4, "test", &g_stLinkId);
printf("Submit result : %d, SeqId = %d\n", nRetCode, nSeq);
printf("Press Any To Test Query Command.\n\n");
system("pause");
printf("\n");
//3.測(cè)試QUERY命令.
nSeq = cmpp.GetSeqId();
nRetCode = cmpp.Query("20040124", 0); //查詢總量.
printf("Query result : %d, SeqId = %d\n", nRetCode, nSeq);
printf("Press Any To Test Cancel Command.\n");
system("pause");
printf("\n");
//4.測(cè)試CANCEL命令.
nSeq = cmpp.GetSeqId();
nRetCode = cmpp.Cancel(g_nMsgid);
printf("Cancel result : %d, SeqId = %d\n", nRetCode, nSeq);
printf("Press Any To Test ActiveTest Command.\n");
system("pause");
printf("\n");
//5.測(cè)試ACTIVETEST命令.
nSeq = cmpp.GetSeqId();
nRetCode = cmpp.ActiveTest();
printf("ActiveTest result : %d, SeqId = %d\n", nRetCode, nSeq);
printf("Press Any To Test Terminate Command And Release CmppClient Module.\n");
system("pause");
printf("\n");
//6.測(cè)試TERMINATE命令.
cmpp.Release();
printf("Press Any To Exit This Test Program.\n");
system("pause");
printf("\n");
return 0;
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -