?? 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;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -