📄 psgip.cpp
字号:
m_szScheduleTime[12] = '0';
return S_OK;
}
STDMETHODIMP CPSgip::put_ScheduleTime(BSTR newVal)
{
USES_CONVERSION;
strcpy(m_szScheduleTime, W2A(newVal));
if(CheckTime(m_szScheduleTime))
strcat(m_szScheduleTime, "032+");
else
m_szScheduleTime[0] = 0;
return S_OK;
}
STDMETHODIMP CPSgip::get_ExpireTime(BSTR *pVal)
{
USES_CONVERSION;
m_szExpireTime[12] = 0;
*pVal = A2BSTR(m_szExpireTime);
m_szExpireTime[12] = '0';
return S_OK;
}
STDMETHODIMP CPSgip::put_ExpireTime(BSTR newVal)
{
USES_CONVERSION;
strcpy(m_szExpireTime, W2A(newVal));
if(CheckTime(m_szExpireTime))
strcat(m_szExpireTime, "032+");
else
m_szExpireTime[0] = 0;
return S_OK;
}
STDMETHODIMP CPSgip::get_SeviceType(BSTR *pVal)
{
USES_CONVERSION;
*pVal = A2BSTR(m_szServiceType);
return S_OK;
}
STDMETHODIMP CPSgip::put_SeviceType(BSTR newVal)
{
USES_CONVERSION;
strncpy(m_szServiceType, W2A(newVal), 10);
return S_OK;
}
STDMETHODIMP CPSgip::get_FeeType(BYTE *pVal)
{
*pVal = m_bFeeType;
return S_OK;
}
STDMETHODIMP CPSgip::put_FeeType(BYTE newVal)
{
m_bFeeType = newVal;
return S_OK;
}
STDMETHODIMP CPSgip::get_FeeValue(long *pVal)
{
*pVal = atol(m_szFeeValue);
return S_OK;
}
STDMETHODIMP CPSgip::put_FeeValue(long newVal)
{
sprintf(m_szFeeValue, "%d", newVal);
return S_OK;
}
STDMETHODIMP CPSgip::get_GivenValue(long *pVal)
{
*pVal = atol(m_szGivenValue);
return S_OK;
}
STDMETHODIMP CPSgip::put_GivenValue(long newVal)
{
sprintf(m_szGivenValue, "%d", newVal);
return S_OK;
}
STDMETHODIMP CPSgip::get_TPpid(BYTE *pVal)
{
*pVal = m_bTPpid;
return S_OK;
}
STDMETHODIMP CPSgip::put_TPpid(BYTE newVal)
{
m_bTPpid = newVal;
return S_OK;
}
STDMETHODIMP CPSgip::get_TPudhi(BYTE *pVal)
{
*pVal = m_bTPudhi;
return S_OK;
}
STDMETHODIMP CPSgip::put_TPudhi(BYTE newVal)
{
m_bTPudhi = newVal;
return S_OK;
}
STDMETHODIMP CPSgip::get_MessageCoding(BYTE *pVal)
{
*pVal = m_bMessageCoding;
return S_OK;
}
STDMETHODIMP CPSgip::put_MessageCoding(BYTE newVal)
{
m_bMessageCoding = newVal;
return S_OK;
}
STDMETHODIMP CPSgip::get_RegisteredDeliveryFlag(BYTE *pVal)
{
*pVal = m_bReportFlag;
return S_OK;
}
STDMETHODIMP CPSgip::put_RegisteredDeliveryFlag(BYTE newVal)
{
m_bReportFlag = newVal;
return S_OK;
}
STDMETHODIMP CPSgip::get_AgentFlag(BYTE *pVal)
{
*pVal = m_bAgentFlag;
return S_OK;
}
STDMETHODIMP CPSgip::put_AgentFlag(BYTE newVal)
{
m_bAgentFlag = newVal;
return S_OK;
}
STDMETHODIMP CPSgip::get_MoreLateToMTFlag(BYTE *pVal)
{
*pVal = m_bMoreLateToMTFlag;
return S_OK;
}
STDMETHODIMP CPSgip::put_MoreLateToMTFlag(BYTE newVal)
{
m_bMoreLateToMTFlag = newVal;
return S_OK;
}
STDMETHODIMP CPSgip::get_SPID(BSTR *pVal)
{
USES_CONVERSION;
*pVal = A2BSTR(m_szCorpID);
return S_OK;
}
STDMETHODIMP CPSgip::put_SPID(BSTR newVal)
{
USES_CONVERSION;
char szTemp[MAX_PATH];
strcpy(szTemp, W2A(newVal));
if(strlen(szTemp) > 5)
{
m_dwSPID = atol(szTemp);
sprintf(m_szCorpID, "%05d", m_dwSPID % 100000);
}
return S_OK;
}
STDMETHODIMP CPSgip::get_SPNumber(BSTR *pVal)
{
USES_CONVERSION;
*pVal = A2BSTR(m_szSPNumber);
return S_OK;
}
STDMETHODIMP CPSgip::put_SPNumber(BSTR newVal)
{
USES_CONVERSION;
strncpy(m_szSPNumber, W2A(newVal), MAX_LEN_MOBILE_ID);
return S_OK;
}
STDMETHODIMP CPSgip::get_FeeMobileID(BSTR *pVal)
{
USES_CONVERSION;
*pVal = A2BSTR(m_szFeeMobileID);
return S_OK;
}
STDMETHODIMP CPSgip::put_FeeMobileID(BSTR newVal)
{
USES_CONVERSION;
strncpy(m_szFeeMobileID, W2A(newVal), MAX_LEN_MOBILE_ID);
return S_OK;
}
STDMETHODIMP CPSgip::get_MessageType(BYTE *pVal)
{
*pVal = m_bMessageType;
return S_OK;
}
STDMETHODIMP CPSgip::put_MessageType(BYTE newVal)
{
m_bMessageType = newVal;
return S_OK;
}
STDMETHODIMP CPSgip::get_Info(eInfoType eGetInfoType, long *pVal)
{
switch(eGetInfoType)
{
case WaitSendNumber:
*pVal = GetWaitSendCount();
break;
case SubmitNumber:
*pVal = m_dwSubmitNumber;
break;
case SubmitResponseSuccessedNumber:
*pVal = m_dwSubmitResponseSuccessedNumber;
break;
case SubmitResponseFailedNumber:
*pVal = m_dwSubmitResponseFailedNumber;
break;
case CurrentError:
*pVal = m_dwCurrentError4System;
break;
case CurrentProtocolError:
*pVal = m_dwCurrentError4Protocol;
break;
case LastError:
*pVal = m_dwLastError4System;
break;
case LastProtocolError:
*pVal = m_dwLastError4Protocol;
break;
case LastTimeError:
*pVal = m_dwLastTime4SystemError;
break;
case LastTimeProtocolError:
*pVal = m_dwLastTime4ProtocolError;
break;
case ThreadState:
*pVal = m_bIsSendRun * 1
+ m_bIsRecvRun * 10
+ m_bIsListenRun * 100
+ m_bIsEnableRun * 1000
+ m_bIsEnableListen * 10000
+ m_bIsBinding * 100000
+ m_bIsBinded * 1000000
+ m_bIsInit * 10000000;
break;
case SendTime:
*pVal = m_dwSendTime;
break;
case ResponseTime:
*pVal = m_dwResponseTime;
break;
}
return S_OK;
}
long CPSgip::Terminate()
{
if(m_bIsBinded)
{
m_bIsEnableRun = false;
Sleep(m_lPauseTime4Terminate / 1000);
while(m_bIsSendRun || m_bIsRecvRun)
{
Sleep(m_lPauseTime4Terminate / 1000);
}
closesocket(m_sSocket4MT);
m_bIsBinded = false;
}
if(m_bIsUnbind)
{
WSASetEvent(m_hEvent4SaveBuffer);
SaveBuffer();
WSAResetEvent(m_hEvent4SaveBuffer);
}
return 0;
}
long CPSgip::GetWaitSendCount()
{
long lCount = 0;
for(int i = 0; i < MAX_BUFFER_SIZE; i++)
{
if(m_sSMBuffer[i].bFlag != FLAG_BUFFER_VALID)
{
lCount++;
}
}
return lCount;
}
//检查手机号码pszMobileID是否带有pszPreFix前缀
BOOL IsMobileIDWithPreFix(const char* pszMobileID, const char* pszPreFix)
{
if(strlen(pszMobileID) < strlen(pszPreFix))
{//手机号码没有前缀长,则肯定不会“含有”前缀
return FALSE;
}
for(UINT i = 0; i < strlen(pszPreFix); i++)
{
if(pszMobileID[i] != pszPreFix[i])
{
return FALSE;
}
}
return TRUE;
}
/********************************************************************************************************************************\
在pszMobileCode前面加上前缀,如果需要
[in] pszMobileCode
手机号码
[in] pszPreFix
前缀
[out] pszResult
返回加上前缀的pszMobileCode
\********************************************************************************************************************************/
void AddPreFix(const char* pszMobileCode, const char* pszPreFix, char *pszResult)
{
pszResult[0] = '\0';
if( !strlen(pszMobileCode) )
{//空串
return ;
}
if(IsMobileIDWithPreFix(pszMobileCode, pszPreFix))
{//有前缀,不用加
strcpy(pszResult, pszMobileCode);
}else
{//无前缀,要加上
strcpy(pszResult, pszPreFix);
strcat(pszResult, pszMobileCode);
}
}
bool CPSgip::AddMobileID(BSTR bStrMobileID)
{
USES_CONVERSION;
char szSeps[] = "| ,\t\n";
char *pcPos;// szMobileID[MAX_LEN_MOBILE_ID + 1];
DWORD i = 0;
pcPos = strtok(W2A(bStrMobileID), szSeps);
while(pcPos)
{
i++;
pcPos = strtok(NULL, szSeps);
}
if(((ULONG)(MAX_BUFFER_SIZE - GetWaitSendCount())) < (i / m_lSendMaxNumberPerPackage + 1)) return false;
pcPos = strtok(W2A(bStrMobileID), szSeps);
while(pcPos)
{
if(m_lBufferIndex4MultiSM < 0)
{
if(GetWaitSendCount() >= MAX_BUFFER_SIZE)return false;
//从Buffer中取出一个空位置
if(m_cQueueEmpty.Out((int*)(&m_lBufferIndex4MultiSM)))
{
// m_lBufferIndex4MultiSM = i;
strcpy(m_sSMBuffer[m_lBufferIndex4MultiSM].sSgipMsg.uMessageBody.sMessageSubmit.szSPNumber, m_szSPNumber);
//OK!下面代码行:strcpy(..)将要把一个手机号码放入包中,在放入之前,加上前缀
char szChargeNumberWithPreFix[21 * 2 + 1]; //加上前缀(如果需要)后的手机号码
AddPreFix(m_szFeeMobileID, m_szMobileIDFix, szChargeNumberWithPreFix);
if(strlen(szChargeNumberWithPreFix) > 21)
{
return false;
}
strcpy(m_sSMBuffer[m_lBufferIndex4MultiSM].sSgipMsg.uMessageBody.sMessageSubmit.szChargeNumber, szChargeNumberWithPreFix);
m_sSMBuffer[m_lBufferIndex4MultiSM].sSgipMsg.uMessageBody.sMessageSubmit.bUserCount = 0;
m_sSMBuffer[m_lBufferIndex4MultiSM].sSgipMsg.uMessageBody.sMessageSubmit.dwMessageLength = htonl(m_lMesageContentLength);
memcpy(m_sSMBuffer[m_lBufferIndex4MultiSM].sSgipMsg.uMessageBody.sMessageSubmit.bMessageContent,
m_BMessageContent,
m_lMesageContentLength);
if( (m_bMessageCoding == 3) || (m_bMessageCoding == 4) )
{
memcpy(m_sSMBuffer[m_lBufferIndex4MultiSM].sSgipMsg.uMessageBody.sMessageSubmit.bMessageContent,
m_BMessageContent,
m_lMesageContentLength);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -