⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 psgip.cpp

📁 手机开发环境BREW实例
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	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 + -