www.pudn.com > SendMsgOCX.rar > WMsgSent.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; 
}