238 lines
4.5 KiB
C++
238 lines
4.5 KiB
C++
#include "precomp.h"
|
|
#include "Message.h"
|
|
|
|
CChatMessage *CChatMessage::ms_pFirst = NULL;
|
|
int CChatMessage::ms_cMessages = 0;
|
|
CChatMessage *CChatMessage::ms_pLast = NULL;
|
|
int CChatMessage::ms_iMessageLimit = INITIAL_LIMIT;
|
|
|
|
CChatMessage *CChatMessage::get_head()
|
|
{
|
|
return ms_pFirst;
|
|
}
|
|
|
|
|
|
int CChatMessage::get_count()
|
|
{
|
|
return ms_cMessages;
|
|
}
|
|
|
|
|
|
CChatMessage *CChatMessage::get_last()
|
|
{
|
|
return ms_pLast;
|
|
}
|
|
|
|
void CChatMessage::put_limit( int iLimit )
|
|
{
|
|
ASSERT( iLimit >= 1 );
|
|
|
|
ms_iMessageLimit = iLimit;
|
|
|
|
while( ms_cMessages > ms_iMessageLimit )
|
|
{
|
|
CChatMessage *pKillMe = ms_pFirst;
|
|
ms_pFirst = ms_pFirst->m_pNext;
|
|
delete pKillMe;
|
|
}
|
|
}
|
|
|
|
int CChatMessage::get_limit()
|
|
{
|
|
return ms_iMessageLimit;
|
|
}
|
|
|
|
CChatMessage *CChatMessage::get_next() const
|
|
{
|
|
return m_pNext;
|
|
}
|
|
|
|
|
|
CChatMessage *CChatMessage::get_prev() const
|
|
{
|
|
return m_pPrev;
|
|
}
|
|
|
|
|
|
CChatMessage::CHAT_MSGTYPE CChatMessage::get_type() const
|
|
{
|
|
return m_msgType;
|
|
}
|
|
|
|
|
|
const LPTSTR CChatMessage::get_date() const
|
|
{
|
|
return m_szDate;
|
|
}
|
|
|
|
|
|
const LPTSTR CChatMessage::get_time() const
|
|
{
|
|
return m_szTime;
|
|
}
|
|
|
|
|
|
const LPTSTR CChatMessage::get_person() const
|
|
{
|
|
return m_szPerson;
|
|
}
|
|
|
|
|
|
const LPTSTR CChatMessage::get_message() const
|
|
{
|
|
return m_szMessage;
|
|
}
|
|
|
|
CChatMessage::CChatMessage( LPCTSTR szPerson, LPCTSTR szMessage, CHAT_MSGTYPE msgType )
|
|
: m_msgType( msgType ), m_szDate( NULL ), m_szTime( NULL ),
|
|
m_szPerson( NULL ), m_szMessage( NULL ), m_pNext( NULL ), m_pPrev( NULL )
|
|
{
|
|
_GetDate();
|
|
_GetTime();
|
|
m_szPerson = _CopyString( szPerson );
|
|
m_szMessage = _CopyString( szMessage );
|
|
|
|
if( 0 == ms_cMessages )
|
|
{
|
|
ms_pFirst = this;
|
|
ms_pLast = this;
|
|
}
|
|
else
|
|
{
|
|
ms_pLast->m_pNext = this;
|
|
m_pPrev = ms_pLast;
|
|
ms_pLast = this;
|
|
}
|
|
|
|
ms_cMessages++;
|
|
|
|
while( ms_cMessages > ms_iMessageLimit )
|
|
{
|
|
CChatMessage *pKillMe = ms_pFirst;
|
|
ms_pFirst = ms_pFirst->m_pNext;
|
|
delete pKillMe;
|
|
}
|
|
}
|
|
|
|
|
|
CChatMessage::~CChatMessage()
|
|
{
|
|
delete [] m_szDate;
|
|
delete [] m_szTime;
|
|
delete [] m_szPerson;
|
|
delete [] m_szMessage;
|
|
|
|
ms_cMessages--;
|
|
}
|
|
|
|
void CChatMessage::DeleteAll()
|
|
{
|
|
CChatMessage *pMsg = ms_pFirst;
|
|
|
|
while( pMsg )
|
|
{
|
|
CChatMessage *pNext = pMsg->m_pNext;
|
|
delete pMsg;
|
|
pMsg = pNext;
|
|
}
|
|
|
|
ms_pFirst = NULL;
|
|
ms_pLast = NULL;
|
|
ms_cMessages = 0;
|
|
}
|
|
|
|
LPTSTR CChatMessage::_CopyString( LPCTSTR sz )
|
|
{
|
|
LPTSTR szNew = NULL;
|
|
if( NULL == sz )
|
|
{
|
|
DBG_SAVE_FILE_LINE
|
|
szNew = new TCHAR[1];
|
|
ASSERT( szNew );
|
|
if( NULL == szNew )
|
|
{
|
|
return NULL;
|
|
}
|
|
szNew[0] = '\0';
|
|
}
|
|
else
|
|
{
|
|
int iLen = lstrlen( sz ) + 1;
|
|
DBG_SAVE_FILE_LINE
|
|
szNew = new TCHAR[ iLen ];
|
|
ASSERT( szNew );
|
|
if( NULL == szNew )
|
|
{
|
|
return NULL;
|
|
}
|
|
lstrcpyn( szNew, sz, iLen );
|
|
}
|
|
|
|
return szNew;
|
|
}
|
|
|
|
|
|
void CChatMessage::_GetDate()
|
|
{
|
|
int iLen = 1 + GetDateFormat(
|
|
LOCALE_USER_DEFAULT, // locale for which date is to be formatted
|
|
0, // flags specifying function options
|
|
NULL, // time to be formatted
|
|
NULL, // time format string
|
|
NULL, // buffer for storing formatted string
|
|
0 // size, in bytes or characters, of the buffer
|
|
);
|
|
|
|
m_szDate = new TCHAR[ iLen ];
|
|
ASSERT( m_szDate );
|
|
if( 0 == (iLen = GetDateFormat(
|
|
LOCALE_USER_DEFAULT, // locale for which date is to be formatted
|
|
0, // flags specifying function options
|
|
NULL, // time to be formatted
|
|
NULL, // time format string
|
|
m_szDate, // buffer for storing formatted string
|
|
iLen // size, in bytes or characters, of the buffer
|
|
) ) )
|
|
{
|
|
DWORD dw = GetLastError();
|
|
WARNING_OUT(( TEXT("CChatMessage::_GetDate: Can not get date") ));
|
|
}
|
|
else
|
|
{
|
|
m_szDate[ iLen ] = '\0';
|
|
}
|
|
}
|
|
|
|
|
|
void CChatMessage::_GetTime(void)
|
|
{
|
|
int iLen = 1 + GetTimeFormat(
|
|
LOCALE_USER_DEFAULT, // locale for which time is to be formatted
|
|
0, // flags specifying function options
|
|
NULL, // time to be formatted
|
|
NULL, // time format string
|
|
NULL, // buffer for storing formatted string
|
|
0 // size, in bytes or characters, of the buffer
|
|
);
|
|
|
|
m_szTime = new TCHAR[ iLen ];
|
|
ASSERT( m_szTime );
|
|
if( 0 == (iLen = GetTimeFormat(
|
|
LOCALE_USER_DEFAULT, // locale for which time is to be formatted
|
|
0, // flags specifying function options
|
|
NULL, // time to be formatted
|
|
NULL, // time format string
|
|
m_szTime, // buffer for storing formatted string
|
|
iLen // size, in bytes or characters, of the buffer
|
|
) ) )
|
|
{
|
|
DWORD dw = GetLastError();
|
|
WARNING_OUT(( TEXT("CChatMessage::_GetTime: Can not get time") ));
|
|
}
|
|
else
|
|
{
|
|
m_szTime[ iLen ] = '\0';
|
|
}
|
|
}
|
|
|