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

📄 wmsgsent.cpp

📁 手机发送短信的Activex控件
💻 CPP
字号:
// WMsgSent.cpp: implementation of the CWMsgSent class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
//tts #include "WSMModule.h"
#include "WMsgSent.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

enum CWMsgSent::MsgMatchType CWMsgSent::s_matchType = CWMsgSent::MatchTypeNotDefined;			 

CWMsgSent::CWMsgSent()
{

}

CWMsgSent::~CWMsgSent()
{

}

void CWMsgSent::SetFrameNo(BYTE toSet)
{
	ASSERT(CWMsgPacket::IsValidFrameNo(toSet));
	m_frameNo = toSet;
}

void CWMsgSent::SetMessage(BYTE msgType, const BYTE* lpMsgData, DWORD dwMsgSize)
{
	ASSERT(CWMsgPacket::IsValidMsgType(msgType));
	ASSERT(dwMsgSize <= MAX_BIN_MSG_LEN_PER_FRAME);
	
	m_msgType = msgType;
	memcpy(m_binMsgData, lpMsgData, dwMsgSize);
	m_dataSize = dwMsgSize;
}

void CWMsgSent::SetPhoneNumber(LPCSTR lpcszPhoneNumber)
{
	strcpy(m_szPhoneNumber, lpcszPhoneNumber);
}

BYTE CWMsgSent::GetFrameNo() const
{
	return m_frameNo;
}

BYTE& CWMsgSent::GetFrameNoRef()
{
	return m_frameNo;
}

int CWMsgSent::GetPacketCount(int& lastPacketSize) const
{
	int packetCount;
	
	if( m_dataSize == 0 )
	{
		lastPacketSize = 0;
		packetCount = 1;
	}
	else
	{
		lastPacketSize = m_dataSize % MAX_BIN_MSG_BODY_LEN_PER_PACKET;
		packetCount = m_dataSize / MAX_BIN_MSG_BODY_LEN_PER_PACKET ;
	
		if(lastPacketSize == 0)	lastPacketSize = MAX_BIN_MSG_BODY_LEN_PER_PACKET;
		else  packetCount ++;
	}

	return packetCount;
}

int CWMsgSent::GetPacketCount() const
{
	BOOL bUseAdditional;
	return GetPacketCountForSent(bUseAdditional);
}

int CWMsgSent::GetPacketCountForSent(BOOL& bUseAdditional) const
{
	int lastPacketSize;
	int packetCount = GetPacketCount(lastPacketSize);

	bUseAdditional = lastPacketSize > MAX_BIN_MSG_BODY_LEN_OF_LASTPACKET;
	if(bUseAdditional) 	packetCount ++;
	
	return packetCount;
}

void CWMsgSent::GetMsgPacket(int packetIndex, CWMsgPacket& msgPacket) const
{
	BOOL bUseAdditional;
	int packetCount = GetPacketCountForSent(bUseAdditional);

	BOOL bLastPacket = packetIndex == packetCount - 1;
	
	if(bUseAdditional)
	{
		if(bLastPacket) GenAdditionalEndPacket(msgPacket);
		else GenMidPacket(packetIndex, msgPacket);
	}
	else
	{
		if(bLastPacket)	GenEndPacket(msgPacket);
		else GenMidPacket(packetIndex, msgPacket);
	}
}

void CWMsgSent::GenMidPacket(int packetIndex, CWMsgPacket& msgPacket) const
{
	const BYTE* lpDataBegin = m_binMsgData + packetIndex * MAX_BIN_MSG_BODY_LEN_PER_PACKET;
	int dataSize = MAX_BIN_MSG_BODY_LEN_PER_PACKET;

	BYTE packetNo = CWMsgPacket::PacketIndex2PacketNo(packetIndex);
	msgPacket.GenerateMsgPacket(m_szPhoneNumber, m_msgType, m_frameNo, packetNo, lpDataBegin, dataSize, FALSE);
}


void CWMsgSent::GenAdditionalEndPacket(CWMsgPacket& msgPacket) const
{
	BOOL bUseAdditional;
	int packetCount = GetPacketCountForSent(bUseAdditional);
	ASSERT(bUseAdditional);

	int packetIndex = packetCount - 1;
	BYTE packetNo = CWMsgPacket::PacketIndex2PacketNo(packetIndex);
	msgPacket.GenerateMsgPacket(m_szPhoneNumber, m_msgType, m_frameNo, packetNo, NULL, 0, TRUE);
}


void CWMsgSent::GenEndPacket(CWMsgPacket& msgPacket)const
{
	int lastPacketSize;
	int packetCount = GetPacketCount(lastPacketSize);

	int packetIndex = packetCount - 1;
	const BYTE* lpDataBegin = m_binMsgData + packetIndex*MAX_BIN_MSG_BODY_LEN_PER_PACKET;
	
	BYTE packetNo = CWMsgPacket::PacketIndex2PacketNo(packetIndex);
	msgPacket.GenerateMsgPacket(m_szPhoneNumber, m_msgType, m_frameNo, packetNo, lpDataBegin, lastPacketSize, TRUE);
}

enum CWMsgSent::MsgMatchType CWMsgSent::SetMatchType(enum MsgMatchType matchType)
{
	enum CWMsgSent::MsgMatchType toRet = s_matchType;
	s_matchType = matchType;

	return toRet;
}

enum CWMsgSent::MsgMatchType CWMsgSent::GetMatchType() 
{
	return s_matchType;
}

int CWMsgSent::operator == (const CWMsgSent& toCmp) const
{
	return Compare(toCmp) == 0;
}

int CWMsgSent::operator > ( const CWMsgSent& toCmp) const
{
	return Compare(toCmp) > 0;
}

int CWMsgSent::operator < ( const CWMsgSent& toCmp) const
{
	return Compare(toCmp) < 0;
}

int CWMsgSent::Compare(const CWMsgSent& toCmp) const
{
	int result = strcmp(m_szPhoneNumber, toCmp.m_szPhoneNumber);

	if ( 0 != result ) return result;

	switch(s_matchType)
	{

    default:
	case MatchTypeNotDefined:
		ASSERT(FALSE);
	case PhoneNumberOnly:
		break;

	case PhoneNumberAndFrameNo:
		{
			int currNo = m_frameNo;
			int toCmpNo = toCmp.m_frameNo;
			result = currNo - toCmpNo;
		}
		break;

	case PhoneNumberAndSaveTime:
		if( m_saveTime > toCmp.m_saveTime) result = 1;
		else if (m_saveTime == toCmp.m_saveTime) result = 0;
		else result = -1 ;
		break;

	}
	
	return result;
}

void CWMsgSent::SetSaveTime(const MsgSaveTimeType& toSet)
{
	m_saveTime = toSet;
}

MsgSaveTimeType CWMsgSent::GetSaveTime() const
{
	return m_saveTime;
}



LPCSTR CWMsgSent::GetPhoneNumber() const
{
	return m_szPhoneNumber;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -