?? sgipsmg.cpp
字號:
// SGIPSMG.cpp : 定義控制臺應(yīng)用程序的入口點(diǎn)。
//
#include "stdafx.h"
#include "SGIPSMG.h"
// 唯一的應(yīng)用程序?qū)ο?
CWinApp theApp;
using namespace std;
///
/// 處理Deliver消息的函數(shù)
/// Edit with V1.28(打印出MO上行消息的LinkId,這里的LinkId可以不作修改的賦值給對應(yīng)的MT消息)
/// 打印出MO消息的相關(guān)字段,包括MO消息的內(nèi)容.
/// 如果消息編碼是UCS2編碼的話,首先需要轉(zhuǎn)換成MultiByte格式,才能正常顯示。
/// 如果UCS2經(jīng)過轉(zhuǎn)換仍然顯示亂碼,則可能是用戶手機(jī)的問題。
///
int CMySgip::OnDeliver(DeliverStr & deliver) {
char sMultiByte[141];
ZeroMemory(&sMultiByte, 141);
unsigned char uchTmp = 0;
unsigned char pchTmp[1024];
ZeroMemory(pchTmp, 1024);
if (deliver.cMsgCoding == 8) {
memcpy(pchTmp, deliver.sMsgContent, deliver.nMsgLen);
for (unsigned ix=0; ix<deliver.nMsgLen/2; ix++) {
uchTmp = pchTmp[ix*2];
pchTmp[ix*2] = pchTmp[ix*2 + 1];
pchTmp[ix*2 + 1] = uchTmp;
}
int nRet = WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, (LPCWSTR)pchTmp, deliver.nMsgLen/2, sMultiByte, 140, NULL, NULL);
deliver.nMsgLen = nRet;
ZeroMemory(deliver.sMsgContent, 160);
memcpy(deliver.sMsgContent, sMultiByte, nRet);
}
CString str = _T("");
switch( (int)deliver.cMsgCoding ) {
case 0:
str = "ASCII編碼";
break;
case 4:
str = "二進(jìn)制編碼";
break;
case 8:
str = "UCS2編碼";
break;
case 15:
str = "GBK編碼";
break;
default:
str.Format("未知-<%d>", deliver.cMsgCoding);
}
OnLogWrite("Deliver, SeqId = <%u>, MsgLen = <%u>, MsgFmt = <%s>, MsgContent = <%s>, LinkId = <%s>.\n", \
deliver.nSeq, deliver.nMsgLen, str, deliver.sMsgContent, deliver.sLinkId);
return 0;
}
///
/// 處理Report消息的函數(shù)
///
int CMySgip::OnReport(ReportStr & report){
OnLogWrite("Report, SubmitSeqId = <%u>, SubmitDateTime = <%u>, sUserNumber = <%s>, State = <%d>, ErrorCode = <%d>.\n", \
report.nSubmitSeq, report.nSubmitDateTime, report.sUserNumber, report.cState, report.cErrcode);
return 0;
}
///
/// 處理SubmitResponse消息的函數(shù)
/// (V1.23版本及以后可以返回完整的SUBMIT消息內(nèi)容,通過MTResponse中的sgipg_submit ss字段)
///
int CMySgip::OnResponse(MTRespStr & response){
OnLogWrite("MTResponse, SeqId = <%u>, UserNumber = <%s>, Msg = <%s>, Result = <%d>.\n", \
response.nSeq, response.ss.sUserNumber, response.ss.sMsgContent, response.cResult);
return 0;
}
///
/// 處理MT失敗的函數(shù)
/// (V1.23版本及以后可以返回完整的SUBMIT消息內(nèi)容,通過MTResponse中的sgipg_submit ss字段)
///
int CMySgip::OnMTError(MTErrorStr & mterror){
OnLogWrite("MTError.Errcode = <%d>\n", mterror.nErrorType);
return 0;
}
int CMySgip::OnLogWrite(const char* pchFmt, ...)
{
char buffer[1024] = "";
va_list arglist;
va_start( arglist, pchFmt );
_vsnprintf( buffer, 1024, pchFmt, arglist );
va_end(arglist);
printf(buffer);
return 0;
}
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
// 定義一個Csgip對象
CMySgip sgip;
// 定義一個Submit數(shù)據(jù)包
sgipg_submit ss;
ZeroMemory(&ss, sizeof(sgipg_submit));
// 啟動系統(tǒng)
int nStat =
sgip.Start(
"127.0.0.1", ///< 本地監(jiān)聽地址
8802, ///< 本地監(jiān)聽端口
"127.0.0.1", ///< 網(wǎng)關(guān)地址
8801, ///< 網(wǎng)關(guān)端口
"username", ///< SP登錄網(wǎng)關(guān)的用戶名
"password", ///< SP登錄網(wǎng)關(guān)的口令
1, ///< 連接類型(SP登錄網(wǎng)關(guān))
"3010090020", ///< SP的節(jié)點(diǎn)編號
3, ///< 向網(wǎng)關(guān)建立的連接數(shù)
"opennet", ///< 網(wǎng)關(guān)登錄SP的用戶名
"opennet", ///< 網(wǎng)關(guān)登錄SP的口令
16, ///< 允許的網(wǎng)關(guān)向SP建立的最大連接數(shù)
4, ///< 線程池初始線程數(shù)
10 ///< 線程池允許的最大線程數(shù)
);
if (0 != nStat) {
printf("啟動失敗,錯誤碼:%d\n", nStat);
system("pause");
return -1;
}
// 給sgipg_submit消息包賦值
///
/// 構(gòu)造一條主動下發(fā)的免費(fèi)消息包
///
strcpy(ss.sSpNumber, "9655"); ///< 接入號
strcpy(ss.sChargeNumber, "8613012345678"); ///< 計(jì)費(fèi)號碼
ss.cUserCount = 1; ///< 接收消息的用戶手機(jī)數(shù)量
strcpy(ss.sUserNumber, "8613012345678"); ///< 用戶手機(jī)號
strcpy(ss.sCorpId, "90020"); ///< SP得企業(yè)代碼
strcpy(ss.sServiceType, "test"); ///< 業(yè)務(wù)代碼
ss.cFeeType = 1;
ss.cAgentFlag = 0;
ss.cMorelatetoMTFlag = 2;
ss.cReportFlag = 1;
ss.cMessageCoding = 15;
ss.nMsgLen = htonl(strlen("test消息"));
strcpy((char*)ss.sMsgContent, "test消息");
// 通過調(diào)用函數(shù)AddUserNumber增加群發(fā)功能.(要測試群發(fā)的話把下面這句注釋去掉就行)
// sgip.AddUserNumber(&ss, "8613023456789,8613312345670-8613312345699,8613012345678");
// 向網(wǎng)關(guān)提交submit消息包
// nSeq,nDateTime都是輸出參數(shù)。
int ix = 0;
unsigned nSeq, nDateTime;
sgip.Submit(ss, nSeq, nDateTime);
printf("Submit sequence:<%u>, datetime:<%u>\n", nSeq, nDateTime);
///< 程序暫停,此時可以等待接收上行消息
system("pause");
// 退出系統(tǒng)前進(jìn)行系統(tǒng)清理工作
sgip.Release();
system("pause");
return nRetCode;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -