📄 amusecom.cpp
字号:
}
time(&struMtStatus.lSendTime);
//m_listMtStatus.AddTail(struMtStatus);
DWORD dwKey = struMtStatus.dwSubmitID;
WaitForSingleObject(m_hEventMapMt,INFINITE);
m_cmapMtStatus.SetAt(dwKey,struMtStatus);
SetEvent(m_hEventMapMt);
char szDisMsg[MAX_PACKAGE_LNE];
sprintf(szDisMsg,"向[短信中心]发送数据包: MT流水号:%-6d , 手机号:%s , 内容:%s",dwSubmitID,szDestHandset,szShortMsg);
Print(szDisMsg);
return 1;
}
int CAmuseCom::SMPPAppProcDeliver(LPVOID lpVoid)
{
CSMPProtocol::struSMPPSUBMIT* struSmppSubmit;
struSmppSubmit = (CSMPProtocol::struSMPPSUBMIT*)lpVoid;
char szDisMsg[MAX_PACKAGE_LNE];
Print(" ");
Print("==============================================================");
//sprintf(szDisMsg,"[<===SMPP][MO]%s:%s",struSmppSubmit->szSourceAddress,
// struSmppSubmit->szShortMessageText);
sprintf(szDisMsg,"从[短信中心]收到数据包: 类型:[MO数据包] , 手机号:%s , 内容:%s",struSmppSubmit->szSourceAddress,
struSmppSubmit->szShortMessageText);
Print(szDisMsg);
AmuseSend8102(struSmppSubmit->szSourceAddress,struSmppSubmit->szDestAddress,
struSmppSubmit->szShortMessageText);
return 1;
}
int CAmuseCom::SMPPAppProcSubmitRep(DWORD dwSubmitID,DWORD dwMessageID,DWORD dwStatus)
{
char szDisMsg[MAX_PACKAGE_LNE];
//sprintf(szDisMsg,"[<===SMPP][SubmitResp]SubmitID:%d Status:%d MessageID:%d",dwSubmitID,dwStatus,dwMessageID);
sprintf(szDisMsg,"从[短信中心]收到数据包: 类型:[MT应答包] , 消息ID:%d , 状态:%d , MT流水号:%d",dwMessageID,dwStatus,dwSubmitID);
Print(szDisMsg);
struMTSTATUS struMtStatus,struMtRepStatus;
/*
POSITION pos ;
bool bFlag = false;
for (int i=0;i < m_listMtStatus.GetCount();i++)
{
pos = m_listMtStatus.FindIndex(i);
struMtStatus = m_listMtStatus.GetAt(pos);
if(struMtStatus.dwSubmitID == dwSubmitID)
{
m_listMtStatus.RemoveAt(pos);
bFlag = true;
break;
}
}
if(!bFlag)
{
Print("[ERROR]MT流水号匹配失败!");
return 0;
}*/
WaitForSingleObject(m_hEventMapMt,INFINITE);
if(!m_cmapMtStatus.Lookup(dwSubmitID,struMtStatus))
{
SetEvent(m_hEventMapMt);
return 0;
}
m_cmapMtStatus.RemoveKey(dwSubmitID);
SetEvent(m_hEventMapMt);
if( (dwStatus !=0) && (dwStatus !=7) )
{
AmuseSend8103(struMtStatus.nAmuseID,dwStatus);
//add by yan ---12.3
if(dwStatus == 112)
{
CSMPPAgentDlg* pcDlg;
pcDlg = (CSMPPAgentDlg*) AfxGetMainWnd();
pcDlg->PostMessage(WM_CLOSESOCKET_USER);
Print("主动断开与短信中心的连接!(112错误)");
Sleep(5000);
}
return 1;
}
struMtRepStatus.dwSubmitID = struMtStatus.dwSubmitID;
struMtRepStatus.dwMessageID = dwMessageID;
struMtRepStatus.nAmuseID = struMtStatus.nAmuseID;
time(&struMtRepStatus.lSendTime);
//m_listMtRepStatus.AddTail(struMtRepStatus);
WaitForSingleObject(m_hEventMapMtRep,INFINITE);
m_cmapMtRepStatus.SetAt(dwMessageID,struMtRepStatus);
SetEvent(m_hEventMapMtRep);
return 1;
}
int CAmuseCom::SMPPAppProcReport(DWORD dwMessageID,DWORD dwStatus)
{
char szDisMsg[MAX_PACKAGE_LNE];
sprintf(szDisMsg,"从[短信中心]收到数据包: 类型:[状态报告] , 消息ID:%d , 状态:%d",dwMessageID,dwStatus);
Print(szDisMsg);
struMTSTATUS struMtRepStatus;
/*
POSITION pos ;
bool bFlag = false;
for (int i=0;i < m_listMtRepStatus.GetCount();i++)
{
pos = m_listMtRepStatus.FindIndex(i);
struMtRepStatus = m_listMtRepStatus.GetAt(pos);
if(struMtRepStatus.dwMessageID == dwMessageID)
{
m_listMtRepStatus.RemoveAt(pos);
bFlag = true;
break;
}
}
if(!bFlag)
{
Print("[ERROR]消息ID匹配失败!");
AfxMessageBox("dd");
return 0;
}*/
WaitForSingleObject(m_hEventMapMtRep,INFINITE);
if(!m_cmapMtRepStatus.Lookup(dwMessageID,struMtRepStatus))
{
SetEvent(m_hEventMapMtRep);
return 0;
}
m_cmapMtRepStatus.RemoveKey(dwMessageID);
SetEvent(m_hEventMapMtRep);
AmuseSend8103(struMtRepStatus.nAmuseID,dwStatus);
/*if(dwStatus != 0)
{
;//AmuseSend8103(struMtRepStatus.nAmuseID,dwStatus);
}
*/
return 1;
}
int CAmuseCom::AmuseTestLink()
{
char szDisMsg[300];
WaitForSingleObject(m_hEventMapMt,INFINITE);
int nMtCount = m_cmapMtStatus.GetCount();
SetEvent(m_hEventMapMt);
sprintf(szDisMsg,"[STATUS]MT等待应答列表中的长度:%d",nMtCount);
Print(szDisMsg);
WaitForSingleObject(m_hEventMapMtRep,INFINITE);
int nMtRepCount = m_cmapMtRepStatus.GetCount();
SetEvent(m_hEventMapMtRep);
sprintf(szDisMsg,"[STATUS]MT等待状态报告列表中的长度:%d",nMtRepCount);
Print(szDisMsg);
if(m_nAmuseStatus == NO_LOGIN_AMUSE)
{
if(!AmuseLogIn())
{
return 0;
}
return 1;
}
Print("[TSTLNK]检测到游戏引擎的链路...");
m_nAmuseTestStatus = 0;
char szSendMsg[50];
sprintf(szSendMsg,"5000 0 0\n");
if(!m_pcAmuseSocket->SMSCSendMsg(szSendMsg,strlen(szSendMsg)))
{
m_nAmuseTestStatus = -1;
}
long lTimeStart,lTimeNow;
time(&lTimeStart); time(&lTimeNow);
while(((lTimeNow-lTimeStart) <= TESTLINK_TIMEOUT_SEC)&&(m_nAmuseTestStatus == 0))
{
MSG Msg;
while(PeekMessage(&Msg,NULL,NULL,NULL,PM_REMOVE)) //单线程能够处理其他消息
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
Sleep(10);
time(&lTimeNow);
}
if((m_nAmuseTestStatus == 0)||(m_nAmuseTestStatus == -1))
{
m_nAmuseStatus = NO_LOGIN_AMUSE;
Print("[TSTLNK][ERROR]链路被中断...重新注册");
if(!AmuseLogIn())
return 0;
}
Print("[TSTLNK]链路正常!");
ShowStatus(APP_AMUSECOM + STAT_AMUSE_LINK,1,NULL);
return 1;
}
int CAmuseCom::TestLinkTwo()
{
if(m_nProfileStat == 0)
return 0;
if(m_nSMPPAppStatus == NO_LOGIN_SMPPAPP)
{
SMPPAppLogIn();
}
else
{
m_pcSMPProtocol->SMPPTestLink();
}
AmuseTestLink();
return 1;
}
int CAmuseCom::LogInTwo()
{
return 1;
}
UINT GetSMPPDataThread(LPVOID pParam)
{
DWORD dwSubmitID,dwMessageID,dwStatus;
CAmuseCom* pcAmuseCom = (CAmuseCom*)pParam;
while(1)
{
CSMPProtocol::struSMPPSUBMIT struSmppSubmit;
if(!pcAmuseCom->m_pcSMPProtocol->SMPPGetDeliver(&struSmppSubmit))
pcAmuseCom->SMPPAppProcDeliver((LPVOID)&struSmppSubmit);
if(!pcAmuseCom->m_pcSMPProtocol->SMPPGetSubmitRep(&dwSubmitID,&dwMessageID,&dwStatus))
pcAmuseCom->SMPPAppProcSubmitRep(dwSubmitID,dwMessageID,dwStatus);
if(!pcAmuseCom->m_pcSMPProtocol->SMPPGetStatReport(&dwMessageID,&dwStatus))
pcAmuseCom->SMPPAppProcReport(dwMessageID,dwStatus);
Sleep(5);
}
return 1;
}
int CAmuseCom::SMPPAppLogIn()
{
char szSMPPIP[30],szSystemID[30],szPassword[30],szSystemType[30];
int nSMPPort;
if(!GetPrivateProfileString(m_szDestSMSCKey, "IP", NULL,
szSMPPIP, sizeof(szSMPPIP),PROFILE_NAME))
{
ProfileErr(m_szDestSMSCKey,"IP");
return 0;
}
nSMPPort = GetPrivateProfileInt(m_szDestSMSCKey, "PORT", 0,PROFILE_NAME);
if(nSMPPort == 0)
{
ProfileErr(m_szDestSMSCKey,"PORT");
return 0;
}
if(!GetPrivateProfileString(m_szDestSMSCKey, "System_id", NULL,
szSystemID, sizeof(szSystemID),PROFILE_NAME))
{
ProfileErr(m_szDestSMSCKey,"System_id");
return 0;
}
if(!GetPrivateProfileString(m_szDestSMSCKey, "Password", NULL,
szPassword, sizeof(szPassword),PROFILE_NAME))
{
ProfileErr(m_szDestSMSCKey,"Password");
return 0;
}
if(szPassword[0] == 0x20)
szPassword[0] = 0x00;
if(!GetPrivateProfileString(m_szDestSMSCKey, "System_type", NULL,
szSystemType, sizeof(szSystemType),PROFILE_NAME))
{
ProfileErr(m_szDestSMSCKey,"System_type");
return 0;
}
//add by yan ------12.3
int g_n112DelayTime = GetPrivateProfileInt(m_szDestSMSCKey, "DELAYTIME", 0,PROFILE_NAME);
CSMPProtocol::struSMPPLOGIN struSmppLogIn;
memset(&struSmppLogIn,0,sizeof(struSmppLogIn));
strcpy(struSmppLogIn.szSystemID,szSystemID);
strcpy(struSmppLogIn.szPassword,szPassword);
strcpy(struSmppLogIn.szSystemType,szSystemType);
struSmppLogIn.nTON = BYTE(2);
struSmppLogIn.nPI = BYTE(1);
if(m_pcSMPProtocol->SMPPLogIn(szSMPPIP,nSMPPort,struSmppLogIn))
{
return 0;
}
m_nSMPPAppStatus = LOG_SMPPAPP_SUCCESS;
//启动线程;
AfxBeginThread(GetSMPPDataThread,this,THREAD_PRIORITY_NORMAL);
return 1;
}
int CAmuseCom::Print(char* szPrintMsg)
{
//m_pcDlg->PostMessage(WM_DISPLAY_MSG,APP_AMUSECOM,(LPARAM)szPrintMsg);
m_pcDlg->Display(APP_AMUSECOM,szPrintMsg);
return 1;
}
int CAmuseCom::ShowStatus(int nType,int nValue,char* szMsg)
{
CSMPPAgentDlg* pcDlg;
pcDlg = (CSMPPAgentDlg*) AfxGetMainWnd();
m_pcDlg->ShowStatus(nType,nValue,szMsg);
return 1;
}
int CAmuseCom::ProfileErr(char* szSection,char* szKey)
{
char szMsg[300];
m_pcDlg->KillTimer(2);
sprintf(szMsg,"读取配置文件出错--节名: [%s] , 关健字: [%s]\n\n请检查配置文件!",szSection,szKey);
m_pcDlg->MessageBox(szMsg,"出错提示",MB_ICONSTOP);
m_pcDlg->Exit(1);
return 1;
}
int CAmuseCom::SendAmuseBuff()
{
int nSendAmuseSeq;
struSENDAMUSE struSendAmuse;
long lNowTime;
WaitForSingleObject(m_hEventMapSendAmuse,INFINITE);
POSITION pos = m_cmapSendAmuse.GetStartPosition();
while(pos != NULL)
{
m_cmapSendAmuse.GetNextAssoc(pos,nSendAmuseSeq,struSendAmuse);
if(struSendAmuse.nSendCount == 3)
m_cmapSendAmuse.RemoveKey(nSendAmuseSeq);
time(&lNowTime);
if((lNowTime - struSendAmuse.lSendTime)>= RESEND_INTERVAL)
{
char szDisMsg[MAX_PACKAGE_LNE];
sprintf(szDisMsg,"向[游戏引擎]发送数据包: 类型:[8102重发] , 内容:%s",struSendAmuse.szMsg);
Print(szDisMsg);
if((m_nAmuseStatus != LOG_AMUSE_SUCCESS)||
(!m_pcAmuseSocket->SMSCSendMsg(struSendAmuse.szMsg,strlen(struSendAmuse.szMsg))))
{
m_cmapSendAmuse.RemoveKey(nSendAmuseSeq);
break;
}
}
struSendAmuse.nSendCount++;
m_cmapSendAmuse.SetAt(nSendAmuseSeq,struSendAmuse);
}
SetEvent(m_hEventMapSendAmuse);
//Modify by LiuTianJun on 2001-12-28
WaitForSingleObject(m_hEventMapMtRep,INFINITE);
if(m_cmapMtRepStatus.GetCount()>5000)
m_cmapMtRepStatus.RemoveAll();
SetEvent(m_hEventMapMtRep);
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -