DragonNest/Extern/Nexon/NMClass/nmdataobject.cpp

2905 lines
82 KiB
C++
Raw Normal View History

2024-12-19 09:48:26 +08:00
#include "PCH.h"
#include "NMDataObject.h"
#include <string>
#include <algorithm>
#ifndef STRSAFE_NO_DEPRECATE
#define STRSAFE_NO_DEPRECATE
#endif
#include <strsafe.h>
NMVirtualKey const keyVirtualAll = { kGameCode_NULL, 0 };
NMVirtualKey const keyNexoncom = { kGameCode_nexoncom, 1 };
NMVirtualKey const keyKart = { kGameCode_kartrider, 1 };
bool operator==( const NMVirtualKey& keyLeft, const NMVirtualKey& keyRight )
{
return ( keyLeft.uGameCode == keyRight.uGameCode && keyLeft.uVirtualIDCode == keyRight.uVirtualIDCode );
}
bool operator==( const NMFriendKey& keyLeft, const NMFriendKey& keyRight )
{
return ( keyLeft.uIDCode == keyRight.uIDCode && keyLeft.keyOwner == keyRight.keyOwner && keyLeft.keyVirtual == keyRight.keyVirtual );
}
bool operator==( const NMFriendCode& icLeft, const NMFriendCode& icRight )
{
return ( icLeft.uIDCode == icRight.uIDCode && icLeft.keyVirtual == icRight.keyVirtual );
}
CNMAvatarItemInfo::CNMAvatarItemInfo( void ) : CNMSerializable( 'ai', 1, 1 )
{
}
BEGIN_SERIALIZE( CNMAvatarItemInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
encoder.Encode1( 0 );
encoder.Encode4( 0 );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMAvatarItemInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
decoder.Decode1();
decoder.Decode4();
//}
END_DESERIALIZE()
CNMAvatarFullInfo::CNMAvatarFullInfo( void ) : CNMAvatarItemInfo()
{
++this->m_uObjectSubCode;
}
bool CNMAvatarFullInfo::operator==( CNMAvatarFullInfo& )
{
return TRUE;
}
BEGIN_SERIALIZE( CNMAvatarFullInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
PRIOR_SERIALIZE( CNMAvatarItemInfo );
encoder.Encode1( 0 );
encoder.Encode2( 0 );
encoder.Encode2( 0 );
for ( _UInt32_ i = 0; i < FULL_LAYER_SIZE; ++i )
{
encoder.Encode4( 0 );
encoder.Encode4( 0 );
}
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMAvatarFullInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
PRIOR_DESERIALIZE( CNMAvatarItemInfo );
decoder.Decode1();
decoder.Decode2();
decoder.Decode2();
for ( _UInt32_ i = 0; i < FULL_LAYER_SIZE; ++i )
{
decoder.Decode4();
decoder.Decode4();
}
//}
END_DESERIALIZE()
CNMDefaultUserInfo::CNMDefaultUserInfo( void ) : CNMSerializable( 'ui', 1, 1 )
{
::ZeroMemory( this->szLoginID, sizeof( this->szLoginID ) );
this->uIDCode = 0;
this->uFlag = 0;
::ZeroMemory( this->szWord, sizeof( this->szWord ) );
this->uStatus = kStatus_Unknown;
this->uLocalIP = 0;
this->uVirtualIP = 0;
this->uPort = 0;
}
BEGIN_SERIALIZE( CNMDefaultUserInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
encoder.EncodeString( this->szLoginID );
encoder.Encode8( this->uIDCode );
encoder.Encode4( this->uFlag );
encoder.EncodeString( this->szWord );
encoder.Encode4( this->uStatus );
encoder.Encode4( this->uLocalIP );
encoder.Encode4( this->uVirtualIP );
encoder.Encode2( this->uPort );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMDefaultUserInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
decoder.DecodeString( this->szLoginID, LOGINID_SIZE );
this->uIDCode = decoder.Decode8();
this->uFlag = decoder.Decode4();
decoder.DecodeString( this->szWord, TODAYWORD_SIZE );
this->uStatus = (NMUSERSTATUS) decoder.Decode4();
this->uLocalIP = decoder.Decode4();
this->uVirtualIP = decoder.Decode4();
this->uPort = decoder.Decode2();
//}
END_DESERIALIZE()
CNMRealFriendInfo::CNMRealFriendInfo() : CNMDefaultUserInfo()
{
++this->m_uObjectSubCode;
::ZeroMemory( &this->stBirthday, sizeof( this->stBirthday ) );
this->uBirthdayType = 0;
}
BEGIN_SERIALIZE( CNMRealFriendInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
PRIOR_SERIALIZE( CNMDefaultUserInfo );
encoder.EncodeString( _T( "" ) ); // for szMemo
OBJECT_ENCODE( this->aiAvatarItemInfo );
if ( this->m_uObjectSubCode == 2 )
{
encoder.Encode4( this->stBirthday.wYear );
encoder.Encode1( static_cast<_UInt8_>(this->stBirthday.wMonth) );
encoder.Encode1( static_cast<_UInt8_>(this->stBirthday.wDay) );
encoder.Encode1( this->uBirthdayType );
}
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMRealFriendInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
PRIOR_DESERIALIZE( CNMDefaultUserInfo );
{ // for szMemo
TCHAR szTemp[ MEMO_SIZE ];
decoder.DecodeString( szTemp, MEMO_SIZE );
}
OBJECT_DECODE( this->aiAvatarItemInfo );
if ( this->m_uObjectSubCode == 2 )
{
this->stBirthday.wYear = static_cast<WORD>( decoder.Decode4() );
this->stBirthday.wMonth = decoder.Decode1();
this->stBirthday.wDay = decoder.Decode1();
this->uBirthdayType = decoder.Decode1();
}
//}
END_DESERIALIZE()
CNMVirtualFriendInfo::CNMVirtualFriendInfo( void ) : CNMSerializable( 'fv', 1, 1 )
{
INITIALIZE_FRIENDKEY( this->keyFriend );
::ZeroMemory( this->szNickName, sizeof( this->szNickName ) );
::ZeroMemory( this->szPosition, sizeof( this->szPosition ) );
::ZeroMemory( this->szMetaData, sizeof( this->szMetaData ) );
::ZeroMemory( this->szMemo, sizeof( this->szMemo ) );
this->uVirtualStatus = kVirtualStatus_Offline;
this->uFlag = 0;
this->uLevel = 0;
}
BEGIN_SERIALIZE( CNMVirtualFriendInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
ENCODE_FRIENDKEY( this->keyFriend );
encoder.EncodeString( this->szNickName );
encoder.EncodeString( this->szPosition );
encoder.Encode4( this->uVirtualStatus );
encoder.Encode4( this->uFlag );
encoder.Encode4( this->uLevel );
encoder.EncodeString( this->szMetaData );
encoder.EncodeString( this->szMemo );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMVirtualFriendInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
DECODE_FRIENDKEY( this->keyFriend );
decoder.DecodeString( this->szNickName, NICKNAME_SIZE );
decoder.DecodeString( this->szPosition, POSITION_SIZE );
this->uVirtualStatus = decoder.Decode4();
this->uFlag = decoder.Decode4();
this->uLevel = decoder.Decode4();
decoder.DecodeString( this->szMetaData, METADATA_SIZE );
decoder.DecodeString( this->szMemo, MEMO_SIZE );
//}
END_DESERIALIZE()
CNMFriendInfo::CNMFriendInfo( void ) : CNMRealFriendInfo()
{
++this->m_uObjectSubCode;
INITIALIZE_FRIENDKEY( this->keyFriend );
::ZeroMemory( this->szNickName, sizeof( this->szNickName ) );
::ZeroMemory( this->szPosition, sizeof( this->szPosition ) );
::ZeroMemory( this->szMetaData, sizeof( this->szMetaData ) );
::ZeroMemory( this->szMemo, sizeof( this->szMemo ) );
this->bIsVirtualOnline = FALSE;
this->uLevel = 0;
}
BEGIN_SERIALIZE( CNMFriendInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
PRIOR_SERIALIZE( CNMRealFriendInfo );
ENCODE_FRIENDKEY( this->keyFriend );
encoder.EncodeString( this->szNickName );
encoder.EncodeString( this->szPosition );
encoder.Encode1( static_cast<UINT8>( this->bIsVirtualOnline ) );
encoder.Encode4( this->uLevel );
encoder.Encode4( this->stBirthday.wYear );
encoder.Encode1( static_cast<_UInt8_>(this->stBirthday.wMonth) );
encoder.Encode1( static_cast<_UInt8_>(this->stBirthday.wDay) );
encoder.Encode1( this->uBirthdayType );
encoder.EncodeString( this->szMetaData );
encoder.EncodeString( this->szMemo );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMFriendInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
PRIOR_DESERIALIZE( CNMRealFriendInfo );
DECODE_FRIENDKEY( this->keyFriend );
decoder.DecodeString( this->szNickName, NICKNAME_SIZE );
decoder.DecodeString( this->szPosition, POSITION_SIZE );
this->bIsVirtualOnline = decoder.Decode1();
this->uLevel = decoder.Decode4();
this->stBirthday.wYear = static_cast<WORD>( decoder.Decode4() );
this->stBirthday.wMonth = decoder.Decode1();
this->stBirthday.wDay = decoder.Decode1();
this->uBirthdayType = decoder.Decode1();
decoder.DecodeString( this->szMetaData, METADATA_SIZE );
decoder.DecodeString( this->szMemo, MEMO_SIZE );
//}
END_DESERIALIZE()
NMFriendCode CNMFriendInfo::GetFriendCode( void )
{
NMFriendCode fcFriendCode;
fcFriendCode.uIDCode = this->uIDCode;
fcFriendCode.keyVirtual = this->keyFriend.keyVirtual;
return fcFriendCode;
}
CNMRealUserInfo::CNMRealUserInfo( void ) : CNMDefaultUserInfo()
{
++this->m_uObjectSubCode;
::ZeroMemory( this->szName, sizeof( this->szName ) );
::ZeroMemory( this->szNickName, sizeof( this->szNickName ) );
this->uMaskInfo = 0;
this->uSex = kSex_Unknown;
this->uAge = 0;
this->uAreaCode = 0;
::ZeroMemory( this->szAreaName, sizeof( this->szAreaName ) );
this->uSchoolCode = 0;
::ZeroMemory( this->szSchoolName, sizeof( this->szSchoolName ) );
::ZeroMemory( &this->stBirthday, sizeof( this->stBirthday ) );
this->uBirthdayType = 0;
::ZeroMemory( this->szMabiID, sizeof( this->szMabiID ) );
this->uAllowChatType = kConfigAllowValue_Unknown;
this->uAllowNoteType = kConfigAllowValue_Unknown;
this->uAllowGameInviteType = kConfigAllowValue_Unknown;
this->uAllowRequestFriendType = kConfigAllowValue_Unknown;
}
BEGIN_SERIALIZE( CNMRealUserInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
PRIOR_SERIALIZE( CNMDefaultUserInfo );
encoder.EncodeString( this->szName );
encoder.EncodeString( this->szNickName );
encoder.Encode4( this->uMaskInfo );
encoder.Encode1( static_cast<UINT8>( this->uSex ) );
encoder.Encode4( this->uAge );
encoder.Encode4( this->uAreaCode );
encoder.EncodeString( this->szAreaName );
encoder.Encode4( this->uSchoolCode );
encoder.EncodeString( this->szSchoolName );
encoder.Encode4( this->stBirthday.wYear );
encoder.Encode1( static_cast<_UInt8_>(this->stBirthday.wMonth) );
encoder.Encode1( static_cast<_UInt8_>(this->stBirthday.wDay) );
OBJECT_ENCODE( this->aiAvatarInfo );
encoder.Encode1( static_cast<UINT8>( this->uAllowChatType ) );
encoder.Encode1( static_cast<UINT8>( this->uAllowNoteType ) );
encoder.Encode1( static_cast<UINT8>( this->uAllowGameInviteType ) );
encoder.Encode1( static_cast<UINT8>( this->uAllowRequestFriendType ) );
if ( this->m_uObjectSubCode == 2 )
{
encoder.Encode1( this->uBirthdayType );
encoder.EncodeString( this->szMabiID );
}
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMRealUserInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
PRIOR_DESERIALIZE( CNMDefaultUserInfo );
decoder.DecodeString( this->szName, NXNAME_SIZE );
decoder.DecodeString( this->szNickName, NICKNAME_SIZE );
this->uMaskInfo = decoder.Decode4();
this->uSex = (NMSEXTYPE) decoder.Decode1();
this->uAge = decoder.Decode4();
this->uAreaCode = decoder.Decode4();
decoder.DecodeString( this->szAreaName, NXAREA_SIZE );
this->uSchoolCode = decoder.Decode4();
decoder.DecodeString( this->szSchoolName, NXSCHOOL_SIZE );
this->stBirthday.wYear = static_cast<WORD>( decoder.Decode4() );
this->stBirthday.wMonth = decoder.Decode1();
this->stBirthday.wDay = decoder.Decode1();
OBJECT_DECODE( this->aiAvatarInfo );
this->uAllowChatType = (NMALLOWTYPE) decoder.Decode1();
this->uAllowNoteType = (NMALLOWTYPE) decoder.Decode1();
this->uAllowGameInviteType = (NMALLOWTYPE) decoder.Decode1();
this->uAllowRequestFriendType = (NMALLOWTYPE) decoder.Decode1();
if ( this->m_uObjectSubCode == 2 )
{
this->uBirthdayType = decoder.Decode1();
decoder.DecodeString( this->szMabiID, LOGINID_SIZE );
}
//}
END_DESERIALIZE()
CNMSelfUserInfo::CNMSelfUserInfo( void ) : CNMRealUserInfo()
{
}
CNMVirtualUserInfo::CNMVirtualUserInfo( void ) : CNMSerializable( 'uv', 1, 1 )
{
INITIALIZE_VIRTUALKEY( this->keyVirtual );
::ZeroMemory( this->szNickName, sizeof( this->szNickName ) );
::ZeroMemory( this->szPosition, sizeof( this->szPosition ) );
::ZeroMemory( this->szMetaData, sizeof( this->szMetaData ) );
this->bIsVirtualOnline = FALSE;
this->bIsStealth = FALSE;
this->uLoginTick = 0;
this->uLevel = 0;
}
BEGIN_SERIALIZE( CNMVirtualUserInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
ENCODE_VIRTUALKEY( this->keyVirtual );
encoder.EncodeString( this->szNickName );
encoder.EncodeString( this->szPosition );
encoder.Encode1( static_cast<UINT8>( this->bIsVirtualOnline ) );
encoder.Encode1( static_cast<UINT8>( this->bIsStealth ) );
encoder.Encode1( static_cast<UINT8>( this->uLoginTick ) );
encoder.Encode4( this->uLevel );
encoder.EncodeString( this->szMetaData );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMVirtualUserInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
DECODE_VIRTUALKEY( this->keyVirtual );
decoder.DecodeString( this->szNickName, NICKNAME_SIZE );
decoder.DecodeString( this->szPosition, POSITION_SIZE );
this->bIsVirtualOnline = decoder.Decode1();
this->bIsStealth = decoder.Decode1();
this->uLoginTick = decoder.Decode1();
this->uLevel = decoder.Decode4();
decoder.DecodeString( this->szMetaData, METADATA_SIZE );
//}
END_DESERIALIZE()
CNMFriendList::CNMFriendList( void ) : CNMSerializable( 'Fl', 1, 1 )
{
}
BEGIN_SERIALIZE( CNMFriendList )
//{
UNREFERENCED_PARAMETER(ssStream);
LIST_ENCODE( NMFriendList, this->aMembers );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMFriendList )
//{
UNREFERENCED_PARAMETER(ssStream);
LIST_DECODE( NMFriendList, this->aMembers );
//}
END_DESERIALIZE();
CNMCategoryInfo::CNMCategoryInfo( void ) : CNMSerializable( 'ci', 1, 1 )
{
this->uCategoryCode = 0;
INITIALIZE_VIRTUALKEY( this->keyOwner );
ZeroMemory( this->szCategoryName, sizeof( this->szCategoryName ) );
this->uProperty = 0;
this->uAllowType = 0;
}
BEGIN_SERIALIZE( CNMCategoryInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
encoder.Encode4( this->uCategoryCode );
ENCODE_VIRTUALKEY( this->keyOwner );
encoder.EncodeString( this->szCategoryName );
if ( this->m_uObjectSubCode == 1 )
{
encoder.Encode1( this->uProperty );
encoder.Encode1( this->uAllowType );
}
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMCategoryInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
this->uCategoryCode = decoder.Decode4();
DECODE_VIRTUALKEY( this->keyOwner );
decoder.DecodeString( this->szCategoryName, CATEGORY_SIZE );
if ( this->m_uObjectSubCode == 1 )
{
this->uProperty = decoder.Decode1();
this->uAllowType = decoder.Decode1();
}
//}
END_DESERIALIZE()
CNMCateFriendInfo::CNMCateFriendInfo( void ) : CNMCategoryInfo()
{
++this->m_uObjectSubCode;
}
BEGIN_SERIALIZE( CNMCateFriendInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
PRIOR_SERIALIZE( CNMCategoryInfo );
LIST_ENCODE( NMFriendList, this->aFriends );
encoder.Encode1( this->uProperty );
encoder.Encode1( this->uAllowType );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMCateFriendInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
PRIOR_DESERIALIZE( CNMCategoryInfo );
LIST_DECODE( NMFriendList, this->aFriends );
this->uProperty = decoder.Decode1();
this->uAllowType = decoder.Decode1();
//}
END_DESERIALIZE()
//////////////////////////////////////////////////////////////////////////
// CNMRejectedUser
//////////////////////////////////////////////////////////////////////////
CNMRejectedUser::CNMRejectedUser()
: CNMSerializable( 'ru', 1, 1 )
{
this->szMemo[ 0 ] = 0;
}
CNMRejectedUser::CNMRejectedUser( CNMCharacter const & rejectedCharacter, LPCTSTR pszMemo /* = NULL */)
: CNMSerializable('ru', 1, 1)
, rejectedCharacter( rejectedCharacter )
{
StringArrayCopy( this->szMemo, pszMemo );
}
BEGIN_SERIALIZE(CNMRejectedUser)
//{
UNREFERENCED_PARAMETER(ssStream);
OBJECT_ENCODE(this->rejectedCharacter);
encoder.EncodeString(this->szMemo);
//}
END_SERIALIZE()
BEGIN_DESERIALIZE(CNMRejectedUser)
//{
UNREFERENCED_PARAMETER(ssStream);
OBJECT_DECODE(this->rejectedCharacter);
decoder.DecodeString(this->szMemo, MEMO_SIZE);
//}
END_DESERIALIZE()
//////////////////////////////////////////////////////////////////////////
// CNMNoteInfo
//////////////////////////////////////////////////////////////////////////
CNMNoteInfo::CNMNoteInfo( void ) : CNMSerializable( 'ni', 1, 1 )
{
this->uNoteSerial = 0;
this->uNoteType = kNoteType_NULL;
this->uSubType = 0;
INITIALIZE_VIRTUALKEY( this->keyVirtual );
this->bReadFlag = FALSE;
::ZeroMemory( &this->stTime, sizeof( this->stTime ) );
::ZeroMemory( this->szTargetID, sizeof( this->szTargetID ) );
::ZeroMemory( this->szFromLoginID, sizeof( this->szFromLoginID ) );
::ZeroMemory( this->szFromNickName, sizeof( this->szFromNickName ) );
::ZeroMemory( this->szMessage, sizeof( this->szMessage ) );
::ZeroMemory( this->szArgument, sizeof( this->szArgument ) );
::ZeroMemory( this->szCustomData, sizeof( this->szCustomData ) );
}
CNMNoteInfo::CNMNoteInfo( CNMNoteInfo2 & rhs ) : CNMSerializable( 'ni', 1, 1 )
{
this->uNoteSerial = rhs.uNoteSerial;
this->uNoteType = static_cast<CNMNoteInfo::NMNOTETYPE>(rhs.uNoteType);
this->uSubType = rhs.uNoteSubType;
this->keyVirtual = rhs.GetSender().GetVKey();
this->bReadFlag = rhs.bReadFlag;
this->stTime = rhs.stTime;
CNMNoteInfoHelper::CharacterListToString(rhs.receiverList, this->szTargetID, TARGETID_SIZE);
StringArrayCopy( this->szFromLoginID, rhs.GetSender().szLoginID );
StringArrayCopy( this->szFromNickName, rhs.GetSender().szNickname );
StringArrayCopy( this->szMessage, rhs.szMessage );
StringArrayCopy( this->szArgument, rhs.szArgument);
StringArrayCopy( this->szCustomData, rhs.szCustomData );
}
BEGIN_SERIALIZE( CNMNoteInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
encoder.Encode4( this->uNoteSerial );
encoder.Encode4( this->uNoteType );
encoder.Encode4( this->uSubType );
ENCODE_VIRTUALKEY( this->keyVirtual );
encoder.Encode1( static_cast<UINT8>( this->bReadFlag ) );
encoder.Encode2( this->stTime.wYear );
encoder.Encode1( static_cast<_UInt8_>(this->stTime.wMonth) );
encoder.Encode1( static_cast<_UInt8_>(this->stTime.wDay) );
encoder.Encode1( static_cast<_UInt8_>(this->stTime.wHour) );
encoder.Encode1( static_cast<_UInt8_>(this->stTime.wMinute) );
encoder.Encode1( static_cast<_UInt8_>(this->stTime.wSecond) );
encoder.EncodeString( this->szTargetID );
encoder.EncodeString( this->szFromLoginID );
encoder.EncodeString( this->szFromNickName );
encoder.EncodeString( this->szMessage );
encoder.EncodeString( this->szArgument );
encoder.EncodeString( this->szCustomData );
OBJECT_ENCODE( this->aiAvatarInfo );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMNoteInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
this->uNoteSerial = decoder.Decode4();
this->uNoteType = (NMNOTETYPE) decoder.Decode4();
this->uSubType = decoder.Decode4();
DECODE_VIRTUALKEY( this->keyVirtual );
this->bReadFlag = decoder.Decode1();
this->stTime.wYear = decoder.Decode2();
this->stTime.wMonth = decoder.Decode1();
this->stTime.wDay = decoder.Decode1();
this->stTime.wHour = decoder.Decode1();
this->stTime.wMinute = decoder.Decode1();
this->stTime.wSecond = decoder.Decode1();
decoder.DecodeString( this->szTargetID, TARGETID_SIZE );
decoder.DecodeString( this->szFromLoginID, LOGINID_SIZE );
decoder.DecodeString( this->szFromNickName, NICKNAME_SIZE );
decoder.DecodeString( this->szMessage, NOTEMSG_SIZE );
decoder.DecodeString( this->szArgument, NOTEARG_SIZE );
decoder.DecodeString( this->szCustomData, NOTECUSTOM_SIZE );
OBJECT_DECODE( this->aiAvatarInfo );
//}
END_DESERIALIZE()
CNMNoteInfoEx::CNMNoteInfoEx( void ) : CNMSerializable( 'ne', 1, 1 )
{
this->uNoteExType = kNoteExType_NULL;
ZeroMemory( this->szMessage, sizeof( this->szMessage ) );
}
BEGIN_SERIALIZE( CNMNoteInfoEx )
//{
UNREFERENCED_PARAMETER(ssStream);
encoder.Encode4( this->uNoteExType );
encoder.EncodeString( this->szMessage );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMNoteInfoEx )
//{
UNREFERENCED_PARAMETER(ssStream);
this->uNoteExType = (NMNOTEEXTYPE) decoder.Decode4();
decoder.DecodeString( this->szMessage, NOTEEXMSG_SIZE );
//}
END_DESERIALIZE()
//////////////////////////////////////////////////////////////////////////
// CNMCharacter
//////////////////////////////////////////////////////////////////////////
CNMCharacter::CNMCharacter()
: CNMSerializable('cr', 1, 1)
{
this->szLoginID[ 0 ] = 0;
INITIALIZE_VIRTUALKEY(this->vkey);
this->szNickname[ 0 ] = 0;
}
CNMCharacter::CNMCharacter(NMGameCode gameCode, LPCTSTR pszNickname, LPCTSTR pszLoginID /* = NULL */, UINT32 uVirtualIDCode /* = 0 */)
: CNMSerializable('cr', 1, 1)
{
StringArrayCopy( this->szLoginID, pszLoginID );
this->vkey.uGameCode = gameCode;
this->vkey.uVirtualIDCode = uVirtualIDCode;
StringArrayCopy( this->szNickname, pszNickname );
}
CNMCharacter::CNMCharacter(NMVirtualKey vkey, LPCTSTR pszNickname, LPCTSTR pszLoginID /* = NULL */)
: CNMSerializable('cr', 1, 1)
{
StringArrayCopy( this->szLoginID, pszLoginID );
this->vkey = vkey;
StringArrayCopy( this->szNickname, pszNickname );
}
BEGIN_SERIALIZE(CNMCharacter)
//{
UNREFERENCED_PARAMETER(ssStream);
encoder.EncodeString(this->szLoginID);
ENCODE_VIRTUALKEY(this->vkey);
encoder.EncodeString(this->szNickname);
//}
END_SERIALIZE()
BEGIN_DESERIALIZE(CNMCharacter)
//{
UNREFERENCED_PARAMETER(ssStream);
decoder.DecodeString(this->szLoginID, LOGINID_SIZE);
DECODE_VIRTUALKEY(this->vkey);
decoder.DecodeString(this->szNickname, NICKNAME_SIZE);
//}
END_DESERIALIZE()
//////////////////////////////////////////////////////////////////////////
// CNMNoteInfo2
//////////////////////////////////////////////////////////////////////////
const CNMCharacter CNMNoteInfo2::defaultReceiver;
CNMNoteInfo2::CNMNoteInfo2() : CNMSerializable('n2', 1, 1)
{
this->uNoteSerial = 0;
this->uNoteType = kNoteType_NULL;
this->uNoteSubType = kNoteSubType_NULL;
::ZeroMemory(&this->stTime, sizeof(this->stTime));
this->bReadFlag = FALSE;
this->bSendFlag = FALSE;
::ZeroMemory(this->szMessage, sizeof(this->szMessage));
::ZeroMemory(this->szArgument, sizeof(this->szArgument));
::ZeroMemory(this->szCustomData, sizeof(this->szCustomData));
}
CNMNoteInfo2::CNMNoteInfo2( CNMNoteInfo & rhs ) : CNMSerializable( 'n2', 1, 1 )
{
this->uNoteSerial = rhs.uNoteSerial;
this->uNoteType = static_cast<CNMNoteInfo2::NMNOTETYPE>(rhs.uNoteType);
this->uNoteSubType = static_cast<CNMNoteInfo2::NMNOTESUBTYPE>(rhs.uSubType);
::CopyMemory(&this->stTime, &rhs.stTime, sizeof(SYSTEMTIME));
this->bReadFlag = FALSE;
this->bSendFlag = FALSE;
::CopyMemory(this->szMessage, rhs.szMessage, NOTEMSG_SIZE);
::CopyMemory(this->szArgument, rhs.szArgument, NOTEARG_SIZE);
::CopyMemory(this->szCustomData, rhs.szCustomData, NOTECUSTOM_SIZE);
::CopyMemory(this->sender.szLoginID, rhs.szFromLoginID, LOGINID_SIZE);
this->sender.vkey = rhs.keyVirtual;
::CopyMemory(this->sender.szNickname, rhs.szFromNickName, NICKNAME_SIZE);
CNMNoteInfoHelper::StringToCharacterList(rhs.szTargetID, this->receiverList, rhs.keyVirtual.uGameCode);
}
CNMNoteInfo2 & CNMNoteInfo2::operator = ( CNMNoteInfo & rhs )
{
this->uNoteSerial = rhs.uNoteSerial;
this->uNoteType = static_cast<CNMNoteInfo2::NMNOTETYPE>(rhs.uNoteType);
this->uNoteSubType = static_cast<CNMNoteInfo2::NMNOTESUBTYPE>(rhs.uSubType);
::CopyMemory(&this->stTime, &rhs.stTime, sizeof(SYSTEMTIME));
this->bReadFlag = FALSE;
this->bSendFlag = FALSE;
::CopyMemory(this->szMessage, rhs.szMessage, NOTEMSG_SIZE);
::CopyMemory(this->szArgument, rhs.szArgument, NOTEARG_SIZE);
::CopyMemory(this->szCustomData, rhs.szCustomData, NOTECUSTOM_SIZE);
::CopyMemory(this->sender.szLoginID, rhs.szFromLoginID, LOGINID_SIZE);
this->sender.vkey = rhs.keyVirtual;
::CopyMemory(this->sender.szNickname, rhs.szFromNickName, NICKNAME_SIZE);
receiverList.clear();
CNMNoteInfoHelper::StringToCharacterList(rhs.szTargetID, this->receiverList, rhs.keyVirtual.uGameCode);
return *this;
}
BEGIN_SERIALIZE(CNMNoteInfo2)
//{
UNREFERENCED_PARAMETER(ssStream);
encoder.Encode4(this->uNoteSerial);
encoder.Encode4(this->uNoteType);
encoder.Encode4(this->uNoteSubType);
encoder.Encode2(this->stTime.wYear);
encoder.Encode1(static_cast<UINT8>(this->stTime.wMonth));
encoder.Encode1(static_cast<UINT8>(this->stTime.wDay));
encoder.Encode1(static_cast<UINT8>(this->stTime.wHour));
encoder.Encode1(static_cast<UINT8>(this->stTime.wMinute));
encoder.Encode1(static_cast<UINT8>(this->stTime.wSecond));
encoder.Encode1(static_cast<UINT8>(this->bReadFlag));
encoder.Encode1(static_cast<UINT8>(this->bSendFlag));
encoder.EncodeString(this->szMessage);
encoder.EncodeString(this->szArgument);
encoder.EncodeString(this->szCustomData);
OBJECT_ENCODE(this->sender);
LIST_ENCODE(NMCharacterList, this->receiverList);
//}
END_SERIALIZE()
BEGIN_DESERIALIZE(CNMNoteInfo2)
//{
UNREFERENCED_PARAMETER(ssStream);
this->uNoteSerial = decoder.Decode4();
this->uNoteType = static_cast<NMNOTETYPE>(decoder.Decode4());
this->uNoteSubType = static_cast<NMNOTESUBTYPE>(decoder.Decode4());
this->stTime.wYear = decoder.Decode2();
this->stTime.wMonth = decoder.Decode1();
this->stTime.wDay = decoder.Decode1();
this->stTime.wHour = decoder.Decode1();
this->stTime.wMinute = decoder.Decode1();
this->stTime.wSecond = decoder.Decode1();
this->bReadFlag = decoder.Decode1();
this->bSendFlag = decoder.Decode1();
decoder.DecodeString(this->szMessage, NOTEMSG_SIZE);
decoder.DecodeString(this->szArgument, NOTEARG_SIZE);
decoder.DecodeString(this->szCustomData, NOTECUSTOM_SIZE);
OBJECT_DECODE(this->sender);
LIST_DECODE(NMCharacterList, this->receiverList);
//}
END_DESERIALIZE()
void CNMNoteInfo2::SetReceiver( CNMCharacter const & receiver )
{
if ( !this->receiverList.empty() )
{
this->receiverList[0] = receiver;
}
else
{
this->receiverList.push_back( receiver );
}
}
//////////////////////////////////////////////////////////////////////////
// ID list <-> Character list
//////////////////////////////////////////////////////////////////////////
namespace CNMNoteInfoHelper
{
BOOL SafeAppendString(LPTSTR pszBuffer, size_t nBufferSize, LPCTSTR pszAppend, size_t & nBufferIndex)
{
if (pszBuffer && pszAppend)
{
size_t nAppendSize = _tcslen(pszAppend);
if (nBufferIndex + nAppendSize < nBufferSize)
{
_tcscpy(pszBuffer + nBufferIndex, pszAppend);
nBufferIndex += nAppendSize;
return TRUE;
}
}
return FALSE;
}
BOOL CharacterListToString(NMCharacterList const & characterList, LPTSTR pszBuffer, size_t nBufferSize)
{
size_t nBufferIndex = 0;
for(NMCharacterList::const_iterator i = characterList.begin(), z = characterList.end(); i != z; ++i)
{
if ((0 < nBufferIndex) && !SafeAppendString(pszBuffer, nBufferSize, _T(";"), nBufferIndex))
{
return FALSE;
}
if (!SafeAppendString(pszBuffer, nBufferSize, i->GetName(), nBufferIndex))
{
return FALSE;
}
}
return (0 < nBufferIndex);
}
typedef std::basic_string<TCHAR> CNMString;
typedef std::vector<CNMString> CNMStringList;
CNMStringList tokenize(const CNMString& str,const CNMString& delimiters)
{
CNMStringList tokens;
// skip delimiters at beginning.
CNMString::size_type lastPos = str.find_first_not_of(delimiters, 0);
// find first "non-delimiter".
CNMString::size_type pos = str.find_first_of(delimiters, lastPos);
while (CNMString::npos != pos || CNMString::npos != lastPos)
{
// found a token, add it to the vector.
CNMString strToken = str.substr(lastPos, pos - lastPos);
strToken.erase( std::remove( strToken.begin(), strToken.end(), _T(' ') ), strToken.end() );
strToken.erase( std::remove( strToken.begin(), strToken.end(), _T('\t') ), strToken.end() );
strToken.erase( std::remove( strToken.begin(), strToken.end(), _T('\n') ), strToken.end() );
strToken.erase( std::remove( strToken.begin(), strToken.end(), _T('\r') ), strToken.end() );
if ( !strToken.empty() )
{
tokens.push_back( strToken );
}
// skip delimiters. Note the "not_of"
lastPos = str.find_first_not_of(delimiters, pos);
// find next "non-delimiter"
pos = str.find_first_of(delimiters, lastPos);
}
return tokens;
}
BOOL StringToCharacterList(LPCTSTR pszBuffer, NMCharacterList & characterList, NMGameCode gameCode)
{
static const CNMString strDelimiters(_T(";"));
BOOL bResult = FALSE;
characterList.clear();
CNMString strText(pszBuffer);
CNMStringList aToken = tokenize( strText, strDelimiters );
for ( CNMStringList::iterator i = aToken.begin(), z = aToken.end(); i != z; ++i )
{
CNMCharacter character;
character.vkey.uGameCode = gameCode;
StringArrayCopy( character.szNickname, i->c_str() );
characterList.push_back(character);
bResult = TRUE;
}
return bResult;
}
};
//////////////////////////////////////////////////////////////////////////
// CNMReportInfo
//////////////////////////////////////////////////////////////////////////
CNMReportInfo::CNMReportInfo( void ) : CNMSerializable( 'ri', 1, 1 )
{
this->uType = kReportType_NULL;
this->uSubType = kReportSubType_NULL;
this->uGameCode = kGameCode_NULL;
this->uAppliedGameCode = kGameCode_NULL;
ZeroMemory( this->szTargetNickname, sizeof( this->szTargetNickname ) );
ZeroMemory( this->szReason, sizeof( this->szReason ) );
ZeroMemory( this->szEvidence, sizeof( this->szEvidence ) );
this->uNoteSerial = 0;
ZeroMemory( this->szReporterNickname, sizeof( this->szReporterNickname ) );
}
BEGIN_SERIALIZE( CNMReportInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
encoder.Encode1( static_cast<UINT8>( this->uType ) );
encoder.Encode1( static_cast<UINT8>( this->uSubType ) );
encoder.Encode4( this->uGameCode );
encoder.Encode4( this->uAppliedGameCode );
encoder.EncodeString( this->szTargetNickname );
encoder.EncodeString( this->szReason );
encoder.EncodeString( this->szEvidence );
encoder.Encode4( this->uNoteSerial );
encoder.EncodeString( this->szReporterNickname );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMReportInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
this->uType = ( NMREPORTTYPE )decoder.Decode1();
this->uSubType = ( NMREPORTSUBTYPE )decoder.Decode1();
this->uGameCode = decoder.Decode4();
this->uAppliedGameCode = decoder.Decode4();
decoder.DecodeString( this->szTargetNickname, NICKNAME_SIZE );
decoder.DecodeString( this->szReason, 4000 );
decoder.DecodeString( this->szEvidence, 20000 );
this->uNoteSerial = decoder.Decode4();
decoder.DecodeString( this->szReporterNickname, NICKNAME_SIZE );
//}
END_DESERIALIZE()
CNMChatMessage::CNMChatMessage( void ) : CNMSerializable( 'cm', 1, 1 )
{
INITIALIZE_VIRTUALKEY( this->keyVirtual );
::ZeroMemory( this->szSenderName, sizeof( this->szSenderName ) );
::ZeroMemory( this->szChatHeader, sizeof( this->szChatHeader ) );
::ZeroMemory( this->szFontHeader, sizeof( this->szFontHeader ) );
::ZeroMemory( this->szChatMessage, sizeof( this->szChatMessage ) );
this->uFlag = 0;
}
namespace
{
static const TCHAR s_szSystem[] = _T("_SYSTEM_");
static const TCHAR s_szNotice[] = _T("_NOTICE_");
static const TCHAR s_szOpen[] = _T("_OPEN_");
};
CNMChatMessage::CNMChatMessage( CNMChannelMessage const & rhs, UINT32 uGameCode )
: CNMSerializable( 'cm', 1, 1 )
{
this->keyVirtual.uGameCode = uGameCode;
this->keyVirtual.uVirtualIDCode = rhs.senderCharacterSN;
switch ( rhs.messageType )
{
case CNMChannelMessage::Type_ErrorMessage:
StringArrayCopy( this->szSenderName, s_szNotice );
break;
case CNMChannelMessage::Type_SystemMessage:
StringArrayCopy( this->szSenderName, s_szSystem );
break;
default:
StringArrayCopy( this->szSenderName, rhs.senderName );
break;
}
this->szChatHeader[ 0 ] = 0;
this->szFontHeader[ 0 ] = 0;
StringArrayCopy( this->szChatMessage, rhs.message );
this->uFlag = rhs.uFlag;
}
BEGIN_SERIALIZE( CNMChatMessage )
//{
UNREFERENCED_PARAMETER( ssStream );
ENCODE_VIRTUALKEY( this->keyVirtual );
OBJECT_ENCODE( this->aiAvatarItemInfo );
encoder.EncodeString( this->szSenderName );
encoder.EncodeString( this->szChatHeader );
encoder.EncodeString( this->szFontHeader );
encoder.EncodeString( this->szChatMessage );
encoder.Encode4( this->uFlag );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMChatMessage )
UNREFERENCED_PARAMETER( ssStream );
DECODE_VIRTUALKEY( this->keyVirtual );
OBJECT_DECODE( this->aiAvatarItemInfo );
decoder.DecodeString( this->szSenderName, CHATSENDER_SIZE );
decoder.DecodeString( this->szChatHeader, CHATHDR_SIZE );
decoder.DecodeString( this->szFontHeader, CHATHDR_SIZE );
decoder.DecodeString( this->szChatMessage, CHATMSG_SIZE );
this->uFlag = decoder.Decode4();
END_DESERIALIZE()
CNMFileEvent::CNMFileEvent( void ) : CNMSerializable( 'fe', 1, 1 )
{
this->uEventId = 0;
::ZeroMemory( this->szFileName, sizeof( this->szFileName ) );
this->uStatus = kFileStatus_Unknown;
this->uParam1 = 0;
this->uParam2 = 0;
this->bSendFlag = FALSE;
}
BEGIN_SERIALIZE( CNMFileEvent )
//{
UNREFERENCED_PARAMETER(ssStream);
encoder.Encode4( this->uEventId );
encoder.EncodeString( this->szFileName );
encoder.Encode4( this->uStatus );
encoder.Encode4( this->uParam1 );
encoder.Encode4( this->uParam2 );
encoder.Encode1( static_cast<UINT8>( this->bSendFlag ) );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMFileEvent )
//{
UNREFERENCED_PARAMETER(ssStream);
this->uEventId = decoder.Decode4();
decoder.DecodeString( this->szFileName, FILENAME_SIZE );
this->uStatus = (NMFILESTATUS) decoder.Decode4();
this->uParam1 = decoder.Decode4();
this->uParam2 = decoder.Decode4();
this->bSendFlag = decoder.Decode1();
//}
END_DESERIALIZE()
CNMFilePath::CNMFilePath( void ) : CNMSerializable( 'fp', 1, 1 )
{
::ZeroMemory( this->szValue, sizeof( this->szValue ) );
}
BEGIN_SERIALIZE( CNMFilePath )
//{
UNREFERENCED_PARAMETER(ssStream);
encoder.EncodeString( this->szValue );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMFilePath )
//{
UNREFERENCED_PARAMETER(ssStream);
decoder.DecodeString( this->szValue, MAX_PATH );
//}
END_DESERIALIZE()
CNMMyGameInfo::CNMMyGameInfo( void ): CNMSerializable( 'mg', 1, 1 )
{
::ZeroMemory( this->aGameCodes, sizeof( this->aGameCodes ) );
}
BEGIN_SERIALIZE( CNMMyGameInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
for ( _UInt32_ i = 0; i < MYGAME_COUNT; ++i )
{
encoder.Encode4( this->aGameCodes[ i ] );
}
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMMyGameInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
for ( _UInt32_ i = 0; i < MYGAME_COUNT; ++i )
{
this->aGameCodes[ i ] = decoder.Decode4();
}
//}
END_DESERIALIZE()
CNMGuildInfoEx::CNMGuildInfoEx( void )
: CNMSerializable( 'ge', 1, 1 )
{
this->uGuildKey = 0;
::ZeroMemory( this->szName, sizeof( this->szName ) );
::ZeroMemory( this->szId, sizeof( this->szId ) );
this->uGameCode = 0;
::ZeroMemory( this->szHomeUrl, sizeof( this->szHomeUrl ) );
this->uLevel = 0;
this->uMemberCount = 0;
this->bHasNewContent = FALSE;
this->bIsMaster = FALSE;
}
NMGuildID CNMGuildInfoEx::GetGuildID() const
{
return NMGuildID( this->uGameCode, this->uGuildKey );
}
BEGIN_SERIALIZE( CNMGuildInfoEx )
//{
UNREFERENCED_PARAMETER(ssStream);
encoder.Encode8( this->uGuildKey );
encoder.EncodeString( this->szName );
encoder.EncodeString( this->szId );
encoder.Encode4( this->uGameCode );
encoder.EncodeString( this->szHomeUrl );
encoder.Encode4( this->uLevel );
encoder.Encode4( this->uMemberCount );
encoder.Encode1( static_cast<UINT8>( this->bHasNewContent ) );
encoder.Encode1( static_cast<UINT8>( this->bIsMaster ) );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMGuildInfoEx )
//{
UNREFERENCED_PARAMETER(ssStream);
this->uGuildKey = decoder.Decode8();
decoder.DecodeString( this->szName, GUILDNAME_SIZE );
decoder.DecodeString( this->szId, GUILDID_SIZE );
this->uGameCode = decoder.Decode4();
decoder.DecodeString( this->szHomeUrl, GUILDHOME_SIZE );
this->uLevel = decoder.Decode4();
this->uMemberCount = decoder.Decode4();
this->bHasNewContent = decoder.Decode1();
this->bIsMaster = decoder.Decode1();
//}
END_DESERIALIZE()
CNMGuildListExInfo::CNMGuildListExInfo( void ) : CNMSerializable( 'el', 1, 1 )
{
}
BEGIN_SERIALIZE( CNMGuildListExInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
LIST_ENCODE( NMGuildInfoExList, this->aGuilds );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMGuildListExInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
LIST_DECODE( NMGuildInfoExList, this->aGuilds );
//}
END_DESERIALIZE()
CNMFindUserRequestInfo::CNMFindUserRequestInfo() : CNMSerializable( 'fr', 1, 1 )
{
this->uToken = 0;
ZeroMemory( this->szName, sizeof( this->szName ) );
this->uAgeMin = 0;
this->uAgeMax = 0;
this->uSex = kSex_Unknown;
this->uRegion = 0;
this->uSchoolCode = 0;
this->bOnlineUserOnly = FALSE;
}
BEGIN_SERIALIZE( CNMFindUserRequestInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
encoder.Encode4( this->uToken );
encoder.EncodeString( this->szName );
encoder.Encode4( this->uAgeMin );
encoder.Encode4( this->uAgeMax );
encoder.Encode4( this->uSex );
encoder.Encode4( this->uRegion );
encoder.Encode4( this->uSchoolCode );
encoder.Encode1( static_cast<UINT8>( this->bOnlineUserOnly ) );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMFindUserRequestInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
this->uToken = decoder.Decode4();
decoder.DecodeString( this->szName, NXNAME_SIZE );
this->uAgeMin = decoder.Decode4();
this->uAgeMax = decoder.Decode4();
this->uSex = (NMSEXTYPE) decoder.Decode4();
this->uRegion = decoder.Decode4();
this->uSchoolCode = decoder.Decode4();
this->bOnlineUserOnly = decoder.Decode1();
//}
END_DESERIALIZE()
CNMFindUserInfo::CNMFindUserInfo( void ) : CNMSerializable( 'fu', 1, 1 )
{
this->uIdCode = 0;
ZeroMemory( this->szId, sizeof( this->szId ) );
ZeroMemory( this->szName, sizeof( this->szName ) );
ZeroMemory( this->szNickName, sizeof( this->szNickName ) );
this->uAge = 0;
this->uSex = kSex_Unknown;
this->uAreaCode = 0;
this->uSchoolCode = 0;
this->uStatus = kStatus_Unknown;
}
BEGIN_SERIALIZE( CNMFindUserInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
encoder.Encode8( this->uIdCode );
encoder.EncodeString( this->szId );
encoder.EncodeString( this->szName );
encoder.EncodeString( this->szNickName );
encoder.Encode4( this->uAge );
encoder.Encode4( this->uSex );
encoder.Encode4( this->uAreaCode );
encoder.Encode4( this->uSchoolCode );
OBJECT_ENCODE( this->aiAvatarInfo );
encoder.Encode4( this->uStatus );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMFindUserInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
this->uIdCode = decoder.Decode8();
decoder.DecodeString( this->szId, LOGINID_SIZE );
decoder.DecodeString( this->szName, NXNAME_SIZE );
decoder.DecodeString( this->szNickName, NICKNAME_SIZE );
this->uAge = decoder.Decode4();
this->uSex = (NMSEXTYPE) decoder.Decode4();
this->uAreaCode = decoder.Decode4();
this->uSchoolCode = decoder.Decode4();
OBJECT_DECODE( this->aiAvatarInfo );
this->uStatus = (NMUSERSTATUS) decoder.Decode4();
//}
END_DESERIALIZE()
//-----------------------------------------------------------------------------
// CNMGuildMemberInfo
//-----------------------------------------------------------------------------
CNMGuildMemberInfo::CNMGuildMemberInfo()
: CNMSerializable( 'gm', 1, 1 )
, uIdCode( 0 )
, bIsGameOnline( FALSE )
, uLevel( 0 )
, uGameLevel( 0 )
, uVirtualIdCode( 1 )
{
this->szLoginId[ 0 ] = 0;
this->szNickName[ 0 ] = 0;
}
CNMGuildMemberInfo::CNMGuildMemberInfo( CNMChannelMemberInfo const & channelMemberInfo )
: CNMSerializable( 'gm', 1, 1 )
, uIdCode( MakeNMIDCode( channelMemberInfo.userSN ) )
, bIsGameOnline( FALSE )
, uLevel( 0 )
, uGameLevel( 0 )
, uVirtualIdCode( channelMemberInfo.characterSN )
{
this->szLoginId[ 0 ] = 0;
StringArrayCopy( this->szNickName, channelMemberInfo.name );
}
BEGIN_SERIALIZE( CNMGuildMemberInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
encoder.Encode8( this->uIdCode );
encoder.EncodeString( this->szLoginId );
encoder.EncodeString( this->szNickName );
OBJECT_ENCODE( this->aiAvatarInfo );
encoder.Encode1( static_cast<UINT8>( this->bIsGameOnline ) );
encoder.Encode1( this->uLevel );
encoder.Encode4( this->uGameLevel );
encoder.Encode4( this->uVirtualIdCode );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMGuildMemberInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
this->uIdCode = decoder.Decode8();
decoder.DecodeString( this->szLoginId, LOGINID_SIZE );
decoder.DecodeString( this->szNickName, NICKNAME_SIZE );
OBJECT_DECODE( this->aiAvatarInfo );
this->bIsGameOnline = decoder.Decode1();
this->uLevel = decoder.Decode1();
this->uGameLevel = decoder.Decode4();
this->uVirtualIdCode = decoder.Decode4();
//}
END_DESERIALIZE()
//-----------------------------------------------------------------------------
// CNMGuildOnlineInfoEx
//-----------------------------------------------------------------------------
CNMGuildOnlineInfoEx::CNMGuildOnlineInfoEx( void )
: CNMSerializable( 'oe', 1, 1 )
, uGuildKey( 0 )
, uChatRoomSerialNo( 0 )
, uChatRoomMemberCount( 0 )
, uChatServerPort( 0 )
, uGameCode( 0 )
{
this->szChatServerIpAddr[ 0 ] = 0;
}
CNMGuildOnlineInfoEx::CNMGuildOnlineInfoEx( CNMClientChannelInfo const & clientChannelInfo, CNMChannelMemberInfoList const & channelMemberInfoList )
: CNMSerializable( 'oe', 1, 1 )
, uGuildKey( MakeNMGuildKey( clientChannelInfo.serverCode, clientChannelInfo.guildSN ) )
, uChatRoomSerialNo( clientChannelInfo.channelSN )
, uChatRoomMemberCount( static_cast< UINT32 >( channelMemberInfoList.members.size() ) )
, uChatServerPort( 0 )
, uGameCode( clientChannelInfo.gameCode )
{
this->szChatServerIpAddr[ 0 ] = 0;
#ifdef _NMSERVER
ITERATE_CONST( NMChannelMemberInfoList, channelMemberInfoList.members, i )
{
this->aOnlineGuildMembers.insert( std::make_pair( MakeNMIDCode( i->userSN ), *i ) );
}
#else
this->aOnlineGuildMembers.assign( channelMemberInfoList.members.begin(), channelMemberInfoList.members.end() );
#endif
}
NMGuildID CNMGuildOnlineInfoEx::GetGuildID() const
{
return NMGuildID( this->uGameCode, this->uGuildKey );
}
BEGIN_SERIALIZE( CNMGuildOnlineInfoEx )
//{
UNREFERENCED_PARAMETER(ssStream);
NMGuildMemberList::iterator iterBegin, iterEnd, iterCur;
encoder.Encode8( this->uGuildKey );
encoder.Encode4( this->uChatRoomSerialNo );
encoder.Encode4( this->uChatRoomMemberCount );
encoder.EncodeString( this->szChatServerIpAddr );
encoder.Encode2( this->uChatServerPort );
encoder.Encode4( static_cast<_UInt32_>( this->aOnlineGuildMembers.size() ) );
iterBegin = this->aOnlineGuildMembers.begin();
iterEnd = this->aOnlineGuildMembers.end();
for ( iterCur = iterBegin; iterCur != iterEnd; ++iterCur )
{
#ifdef _NMSERVER
OBJECT_ENCODE( (*iterCur).second );
#else
OBJECT_ENCODE( (*iterCur) );
#endif
}
encoder.Encode4( this->uGameCode );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMGuildOnlineInfoEx )
//{
UNREFERENCED_PARAMETER(ssStream);
_UInt32_ uSize;
this->uGuildKey = decoder.Decode8();
this->uChatRoomSerialNo = decoder.Decode4();
this->uChatRoomMemberCount = decoder.Decode4();
decoder.DecodeString( this->szChatServerIpAddr, 32 );
this->uChatServerPort = decoder.Decode2();
uSize = decoder.Decode4();
this->aOnlineGuildMembers.clear();
for( _UInt32_ i = 0; i < uSize; ++i )
{
CNMGuildMemberInfo gmiMemberInfo;
OBJECT_DECODE( gmiMemberInfo );
#ifdef _NMSERVER
this->aOnlineGuildMembers.insert(
NMGuildMemberList::value_type(
gmiMemberInfo.uIdCode,
gmiMemberInfo ) );
#else
this->aOnlineGuildMembers.push_back( gmiMemberInfo );
#endif
}
this->uGameCode = decoder.Decode4();
//}
END_DESERIALIZE();
CNMGuildOnlineInfo::CNMGuildOnlineInfo( void ) : CNMSerializable( 'go', 1, 1 )
{
this->uGuildSerialNo = 0;
this->uChatRoomSerialNo = 0;
this->uChatRoomMemberCount = 0;
::ZeroMemory( this->szChatServerIpAddr, sizeof( this->szChatServerIpAddr ) );
this->uChatServerPort = 0;
}
BEGIN_SERIALIZE( CNMGuildOnlineInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
NMGuildMemberList::iterator iterBegin, iterEnd, iterCur;
encoder.Encode4( this->uGuildSerialNo );
encoder.Encode4( this->uChatRoomSerialNo );
encoder.Encode4( this->uChatRoomMemberCount );
encoder.EncodeString( this->szChatServerIpAddr );
encoder.Encode2( this->uChatServerPort );
encoder.Encode4( static_cast<_UInt32_>( this->aOnlineGuildMembers.size() ) );
iterBegin = this->aOnlineGuildMembers.begin();
iterEnd = this->aOnlineGuildMembers.end();
for ( iterCur = iterBegin; iterCur != iterEnd; ++iterCur )
{
#ifdef _NMSERVER
OBJECT_ENCODE( (*iterCur).second );
#else
OBJECT_ENCODE( (*iterCur) );
#endif
}
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMGuildOnlineInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
_UInt32_ uSize;
this->uGuildSerialNo = decoder.Decode4();
this->uChatRoomSerialNo = decoder.Decode4();
this->uChatRoomMemberCount = decoder.Decode4();
decoder.DecodeString( this->szChatServerIpAddr, 32 );
this->uChatServerPort = decoder.Decode2();
uSize = decoder.Decode4();
this->aOnlineGuildMembers.clear();
for( _UInt32_ i = 0; i < uSize; ++i )
{
CNMGuildMemberInfo gmiMemberInfo;
OBJECT_DECODE( gmiMemberInfo );
#ifdef _NMSERVER
this->aOnlineGuildMembers.insert(
NMGuildMemberList::value_type(
gmiMemberInfo.uIdCode,
gmiMemberInfo ) );
#else
this->aOnlineGuildMembers.push_back( gmiMemberInfo );
#endif
}
//}
END_DESERIALIZE();
CNMGuildOnlineInfo& CNMGuildOnlineInfo::operator=( CNMGuildOnlineInfoEx& infoEx )
{
this->uGuildSerialNo = GET_GUILDSERIAL( infoEx.uGuildKey );
this->uChatRoomSerialNo = infoEx.uChatRoomSerialNo;
this->uChatRoomMemberCount = infoEx.uChatRoomMemberCount;
StringArrayCopy( this->szChatServerIpAddr, infoEx.szChatServerIpAddr );
this->uChatServerPort = infoEx.uChatServerPort;
this->aOnlineGuildMembers = infoEx.aOnlineGuildMembers;
return *this;
}
CNMGuildOnlineInfo::operator CNMGuildOnlineInfoEx( void )
{
CNMGuildOnlineInfoEx infoEx;
infoEx.uGuildKey = this->uGuildSerialNo;
infoEx.uChatRoomSerialNo = this->uChatRoomSerialNo;
infoEx.uChatRoomMemberCount = this->uChatRoomMemberCount;
StringArrayCopy( infoEx.szChatServerIpAddr, this->szChatServerIpAddr );
infoEx.uChatServerPort = this->uChatServerPort;
infoEx.aOnlineGuildMembers = this->aOnlineGuildMembers;
return infoEx;
}
CNMSessionInfo::CNMSessionInfo( void ) : CNMSerializable( 'si', 1, 1 )
{
this->uType = kSessionType_General;
INITIALIZE_VIRTUALKEY( this->keyVirtuality );
this->bPassive = FALSE;
this->uInviteMode = 0;
this->uMode = 0;
this->uId = 0;
INITIALIZE_FRIENDCODE( this->fcAssocFriend );
this->uStatus = 0;
this->uServingProcessID = 0;
}
BEGIN_SERIALIZE( CNMSessionInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
encoder.Encode4( this->uType );
ENCODE_VIRTUALKEY( this->keyVirtuality );
encoder.Encode1( static_cast<UINT8>( this->bPassive ) );
encoder.Encode4( this->uInviteMode );
encoder.Encode4( this->uMode );
encoder.Encode8( this->uId );
ENCODE_FRIENDCODE( this->fcAssocFriend );
encoder.Encode4( this->uStatus );
encoder.Encode4( this->uServingProcessID );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMSessionInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
this->uType = ( NMSESSIONTYPE )decoder.Decode4();
DECODE_VIRTUALKEY( this->keyVirtuality );
this->bPassive = decoder.Decode1();
this->uInviteMode = decoder.Decode4();
this->uMode = decoder.Decode4();
this->uId = decoder.Decode8();
DECODE_FRIENDCODE( this->fcAssocFriend );
this->uStatus = decoder.Decode4();
this->uServingProcessID = decoder.Decode4();
//}
END_DESERIALIZE()
CNMSessionMemberInfo::CNMSessionMemberInfo( void ) : CNMSerializable( 'sm', 1, 1 )
{
this->uIDCode = 0;
::ZeroMemory( this->szLoginID, sizeof( this->szLoginID ) );
::ZeroMemory( this->szNickName, sizeof( this->szNickName ) );
INITIALIZE_VIRTUALKEY( this->keyVirtual );
::ZeroMemory( this->szWord, sizeof( this->szWord ) );
this->uStatus = kStatus_Unknown;
}
BEGIN_SERIALIZE( CNMSessionMemberInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
encoder.Encode8( this->uIDCode );
encoder.EncodeString( this->szLoginID );
encoder.EncodeString( this->szWord );
ENCODE_VIRTUALKEY( this->keyVirtual );
encoder.EncodeString( this->szNickName );
encoder.Encode4( this->uStatus );
OBJECT_ENCODE( this->aiAvatarInfo );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMSessionMemberInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
this->uIDCode = decoder.Decode8();
decoder.DecodeString( this->szLoginID, LOGINID_SIZE );
decoder.DecodeString( this->szWord, TODAYWORD_SIZE );
DECODE_VIRTUALKEY( this->keyVirtual );
decoder.DecodeString( this->szNickName, NICKNAME_SIZE );
this->uStatus = decoder.Decode4();
OBJECT_DECODE( this->aiAvatarInfo );
//}
END_DESERIALIZE()
CNMSessionMemberList::CNMSessionMemberList( void ) : CNMSerializable( 'ml', 1, 1 )
{
}
BEGIN_SERIALIZE( CNMSessionMemberList )
//{
UNREFERENCED_PARAMETER(ssStream);
LIST_ENCODE( NMSessionMemberList, this->aMembers );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMSessionMemberList )
//{
UNREFERENCED_PARAMETER(ssStream);
LIST_DECODE( NMSessionMemberList, this->aMembers );
//}
END_DESERIALIZE()
//-----------------------------------------------------------------------------
// CNMChatRoomMemberInfo
//-----------------------------------------------------------------------------
CNMChatRoomMemberInfo::CNMChatRoomMemberInfo()
: CNMRealUserInfo()
, uLevel( 0 )
, uFlag( 0 )
, uIpAddr( 0 )
{
++this->m_uObjectSubCode;
this->szTel[ 0 ] = 0;
INITIALIZE_VIRTUALKEY( this->keyVirtual );
this->szLevelName[ 0 ] = 0;
}
CNMChatRoomMemberInfo::CNMChatRoomMemberInfo( CNMChannelMemberInfo const & rhs, UINT32 uGameCode )
: CNMRealUserInfo()
, uLevel( 0 )
, uFlag( rhs.flag )
, uIpAddr( 0 )
{
++this->m_uObjectSubCode;
this->uIDCode = MakeNMIDCode( rhs.userSN );
this->keyVirtual.uGameCode = uGameCode;
this->keyVirtual.uVirtualIDCode = rhs.characterSN;
StringArrayCopy( this->szNickName, rhs.name );
}
BEGIN_SERIALIZE( CNMChatRoomMemberInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
PRIOR_SERIALIZE( CNMRealUserInfo );
encoder.EncodeString( this->szTel );
ENCODE_VIRTUALKEY( this->keyVirtual );
encoder.Encode4( this->uLevel );
encoder.EncodeString( this->szLevelName );
encoder.Encode4( this->uFlag );
encoder.Encode4( this->uIpAddr );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMChatRoomMemberInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
PRIOR_DESERIALIZE( CNMRealUserInfo );
decoder.DecodeString( this->szTel, NXTEL_SIZE );
DECODE_VIRTUALKEY( this->keyVirtual );
this->uLevel = decoder.Decode4();
decoder.DecodeString( this->szLevelName, GUILDLEVEL_SIZE );
this->uFlag = decoder.Decode4();
this->uIpAddr = decoder.Decode4();
//}
END_DESERIALIZE()
CNMChatRoomMemberList::CNMChatRoomMemberList( void ) : CNMSerializable( 'ma', 1, 1 )
{
}
BEGIN_SERIALIZE( CNMChatRoomMemberList )
//{
UNREFERENCED_PARAMETER(ssStream);
_UInt32_ uSize = static_cast<_UInt32_>( this->aMemberList.size() );
encoder.Encode4( uSize );
for ( _UInt32_ i = 0; i < uSize; ++i )
{
OBJECT_ENCODE( this->aMemberList[ i ] );
}
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMChatRoomMemberList )
//{
UNREFERENCED_PARAMETER(ssStream);
_UInt32_ uSize;
uSize = decoder.Decode4();
this->aMemberList.clear();
for ( _UInt32_ i = 0; i < uSize; ++i )
{
CNMChatRoomMemberInfo memberInfo;
OBJECT_DECODE( memberInfo );
this->aMemberList.push_back( memberInfo );
}
//}
END_DESERIALIZE()
CNMGuildMemberLevelInfo::CNMGuildMemberLevelInfo( void ) : CNMSerializable( 'me', 1, 1 )
{
this->uLevel = 0;
ZeroMemory( this->szName, sizeof( this->szName ) );
}
BEGIN_SERIALIZE( CNMGuildMemberLevelInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
encoder.Encode1( this->uLevel );
encoder.EncodeString( this->szName );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMGuildMemberLevelInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
this->uLevel = decoder.Decode1();
decoder.DecodeString( this->szName, GUILDLEVEL_SIZE );
//}
END_DESERIALIZE()
CNMChatRoomInfoEx::CNMChatRoomInfoEx( void ) : CNMSerializable( 're', 1, 1 )
{
this->uRoomType = 0;
this->uGuildKey = 0;
this->uRoomSerialNo = 0;
this->uGameCode = 0;
ZeroMemory( this->szGuildTitle, sizeof( this->szGuildTitle ) );
ZeroMemory( this->szRoomTitle, sizeof( this->szRoomTitle ) );
this->uLimitLevel = 0;
this->uMaxSize = 0;
this->uFlag = 0;
ZeroMemory( this->szPassword, sizeof( this->szPassword ) );
this->uOwnerIdCode = 0;
this->uStatus = 0;
this->uRequestProcId = 0;
}
namespace
{
void ChannelInfoToChatRoomInfo( CNMClientChannelInfo const & clientChannelInfo, CNMChatRoomInfoEx & chatRoomInfo )
{
chatRoomInfo.uRoomType = clientChannelInfo.channelType;
chatRoomInfo.uGuildKey = MAKE_GUILDKEY( clientChannelInfo.serverCode, clientChannelInfo.guildSN );
chatRoomInfo.uRoomSerialNo = clientChannelInfo.channelSN;
chatRoomInfo.uGameCode = clientChannelInfo.gameCode;
StringArrayCopy( chatRoomInfo.szGuildTitle, clientChannelInfo.guildName );
StringArrayCopy( chatRoomInfo.szRoomTitle, clientChannelInfo.title );
// chatRoomInfo.uLimitLevel
chatRoomInfo.uMaxSize = clientChannelInfo.maxUserCount;
chatRoomInfo.uFlag = clientChannelInfo.flag;
StringArrayCopy( chatRoomInfo.szPassword, clientChannelInfo.password );
chatRoomInfo.uOwnerIdCode = MakeNMIDCode( clientChannelInfo.masterUserSN );
chatRoomInfo.uStatus = clientChannelInfo.nStatus;
chatRoomInfo.uRequestProcId = clientChannelInfo.uRequestProcessId;
}
};
CNMChatRoomInfoEx::CNMChatRoomInfoEx( CNMClientChannelInfo const & rhs ) : CNMSerializable( 're', 1, 1 )
{
ChannelInfoToChatRoomInfo( rhs, *this );
}
CNMChatRoomInfoEx & CNMChatRoomInfoEx::operator = ( CNMClientChannelInfo const & rhs )
{
ChannelInfoToChatRoomInfo( rhs, *this );
return *this;
}
BEGIN_SERIALIZE( CNMChatRoomInfoEx )
//{
UNREFERENCED_PARAMETER(ssStream);
encoder.Encode4( this->uRoomType );
encoder.Encode8( this->uGuildKey );
encoder.Encode4( this->uRoomSerialNo );
encoder.Encode4( this->uGameCode );
encoder.EncodeString( this->szGuildTitle );
encoder.EncodeString( this->szRoomTitle );
encoder.Encode4( this->uLimitLevel );
encoder.Encode4( this->uMaxSize );
encoder.Encode4( this->uFlag );
encoder.EncodeString( this->szPassword );
encoder.Encode8( this->uOwnerIdCode );
encoder.Encode4( this->uStatus );
encoder.Encode4( this->uRequestProcId );
LIST_ENCODE( NMGuildMemberLevelList, this->aLevelInfo );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMChatRoomInfoEx )
//{
UNREFERENCED_PARAMETER(ssStream);
this->uRoomType = decoder.Decode4();
this->uGuildKey = decoder.Decode8();
this->uRoomSerialNo = decoder.Decode4();
this->uGameCode = decoder.Decode4();
decoder.DecodeString( this->szGuildTitle, GUILDNAME_SIZE );
decoder.DecodeString( this->szRoomTitle, ROOMTITLE_SIZE );
this->uLimitLevel = decoder.Decode4();
this->uMaxSize = decoder.Decode4();
this->uFlag = decoder.Decode4();
decoder.DecodeString( this->szPassword, ROOMPWD_SIZE );
this->uOwnerIdCode = decoder.Decode8();
this->uStatus = decoder.Decode4();
this->uRequestProcId = decoder.Decode4();
LIST_DECODE( NMGuildMemberLevelList, this->aLevelInfo );
//}
END_DESERIALIZE()
#ifndef _NMSERVER
CNMChatRoomInfo::CNMChatRoomInfo( void ) : CNMSerializable( 'ri', 1, 1 )
{
this->uRoomType = 0;
this->uClubSerialNo = 0;
this->uRoomSerialNo = 0;
ZeroMemory( this->szClubTitle, sizeof( this->szClubTitle ) );
ZeroMemory( this->szRoomTitle, sizeof( this->szRoomTitle ) );
this->uLimitLevel = 0;
this->uMaxSize = 0;
this->uFlag = 0;
ZeroMemory( this->szPassword, sizeof( this->szPassword ) );
this->uOwnerIdCode = 0;
this->uStatus = 0;
this->uRequestProcId = 0;
ZeroMemory( this->szLevel1Name, sizeof( this->szLevel1Name ) );
ZeroMemory( this->szLevel2Name, sizeof( this->szLevel2Name ) );
ZeroMemory( this->szLevel3Name, sizeof( this->szLevel3Name ) );
ZeroMemory( this->szLevel4Name, sizeof( this->szLevel4Name ) );
ZeroMemory( this->szLevel5Name, sizeof( this->szLevel5Name ) );
}
BEGIN_SERIALIZE( CNMChatRoomInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
encoder.Encode4( this->uRoomType );
encoder.Encode4( this->uClubSerialNo );
encoder.Encode4( this->uRoomSerialNo );
encoder.EncodeString( this->szClubTitle );
encoder.EncodeString( this->szRoomTitle );
encoder.Encode4( this->uLimitLevel );
encoder.Encode4( this->uMaxSize );
encoder.Encode4( this->uFlag );
encoder.EncodeString( this->szPassword );
encoder.Encode8( this->uOwnerIdCode );
encoder.Encode4( this->uStatus );
encoder.Encode4( this->uRequestProcId );
encoder.EncodeString( this->szLevel1Name );
encoder.EncodeString( this->szLevel2Name );
encoder.EncodeString( this->szLevel3Name );
encoder.EncodeString( this->szLevel4Name );
encoder.EncodeString( this->szLevel5Name );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMChatRoomInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
this->uRoomType = decoder.Decode4();
this->uClubSerialNo = decoder.Decode4();
this->uRoomSerialNo = decoder.Decode4();
decoder.DecodeString( this->szClubTitle, GUILDNAME_SIZE );
decoder.DecodeString( this->szRoomTitle, ROOMTITLE_SIZE );
this->uLimitLevel = decoder.Decode4();
this->uMaxSize = decoder.Decode4();
this->uFlag = decoder.Decode4();
decoder.DecodeString( this->szPassword, ROOMPWD_SIZE );
this->uOwnerIdCode = decoder.Decode8();
this->uStatus = decoder.Decode4();
this->uRequestProcId = decoder.Decode4();
decoder.DecodeString( this->szLevel1Name, GUILDLEVEL_SIZE );
decoder.DecodeString( this->szLevel2Name, GUILDLEVEL_SIZE );
decoder.DecodeString( this->szLevel3Name, GUILDLEVEL_SIZE );
decoder.DecodeString( this->szLevel4Name, GUILDLEVEL_SIZE );
decoder.DecodeString( this->szLevel5Name, GUILDLEVEL_SIZE );
//}
END_DESERIALIZE()
CNMChatRoomInfo& CNMChatRoomInfo::operator=( CNMChatRoomInfoEx& infoEx )
{
this->uRoomType = infoEx.uRoomType;
this->uClubSerialNo = GET_GUILDSERIAL( infoEx.uGuildKey );
this->uRoomSerialNo = infoEx.uRoomSerialNo;
this->uGameCode = infoEx.uGameCode;
StringArrayCopy( this->szClubTitle, infoEx.szGuildTitle );
StringArrayCopy( this->szRoomTitle, infoEx.szRoomTitle );
this->uLimitLevel = infoEx.uLimitLevel;
this->uMaxSize = infoEx.uMaxSize;
this->uFlag = infoEx.uFlag;
StringArrayCopy( this->szPassword, infoEx.szPassword );
this->uOwnerIdCode = infoEx.uOwnerIdCode;
this->uStatus = infoEx.uStatus;
this->uRequestProcId = infoEx.uRequestProcId;
ITERATE( NMGuildMemberLevelList, infoEx.aLevelInfo, iter )
{
switch( ( *iter ).uLevel )
{
case 1: StringArrayCopy( this->szLevel1Name, ( *iter ).szName ); break;
case 2: StringArrayCopy( this->szLevel2Name, ( *iter ).szName ); break;
case 3: StringArrayCopy( this->szLevel3Name, ( *iter ).szName ); break;
case 4: StringArrayCopy( this->szLevel4Name, ( *iter ).szName ); break;
case 5: StringArrayCopy( this->szLevel5Name, ( *iter ).szName ); break;
default: break;
}
}
return *this;
}
CNMChatRoomInfo::operator CNMChatRoomInfoEx( void )
{
CNMChatRoomInfoEx infoEx;
CNMGuildMemberLevelInfo liInfo;
infoEx.uRoomType = this->uRoomType;
infoEx.uGuildKey = this->uClubSerialNo;
infoEx.uRoomSerialNo = this->uRoomSerialNo;
infoEx.uGameCode = this->uGameCode;
StringArrayCopy( infoEx.szGuildTitle, this->szClubTitle );
StringArrayCopy( infoEx.szRoomTitle, this->szRoomTitle );
infoEx.uLimitLevel = this->uLimitLevel;
infoEx.uMaxSize = this->uMaxSize;
infoEx.uFlag = this->uFlag;
StringArrayCopy( infoEx.szPassword, this->szPassword );
infoEx.uOwnerIdCode = this->uOwnerIdCode;
infoEx.uStatus = this->uStatus;
infoEx.uRequestProcId = this->uRequestProcId;
liInfo.uLevel = 1; StringArrayCopy( liInfo.szName, this->szLevel1Name ); infoEx.aLevelInfo.push_back( liInfo );
liInfo.uLevel = 2; StringArrayCopy( liInfo.szName, this->szLevel2Name ); infoEx.aLevelInfo.push_back( liInfo );
liInfo.uLevel = 3; StringArrayCopy( liInfo.szName, this->szLevel3Name ); infoEx.aLevelInfo.push_back( liInfo );
liInfo.uLevel = 4; StringArrayCopy( liInfo.szName, this->szLevel4Name ); infoEx.aLevelInfo.push_back( liInfo );
liInfo.uLevel = 5; StringArrayCopy( liInfo.szName, this->szLevel5Name ); infoEx.aLevelInfo.push_back( liInfo );
return infoEx;
}
#endif // _NMSERVER
CNMMessageData::CNMMessageData( void )
: CNMSerializable( 'md', 1, 1 )
, nCode( 0 )
{
this->szMessage[ 0 ] = 0;
}
CNMMessageData::CNMMessageData( INT32 nCode, LPCTSTR pszMessage )
: CNMSerializable( 'md', 1, 1 )
, nCode( nCode )
{
StringArrayCopy( this->szMessage, pszMessage );
}
BEGIN_SERIALIZE( CNMMessageData )
//{
UNREFERENCED_PARAMETER(ssStream);
encoder.Encode4( this->nCode );
encoder.EncodeString( this->szMessage );
//}
END_SERIALIZE();
BEGIN_DESERIALIZE( CNMMessageData )
//{
UNREFERENCED_PARAMETER(ssStream);
this->nCode = decoder.Decode4();
decoder.DecodeString( this->szMessage, SERVER_MSG_SIZE );
//}
END_DESERIALIZE()
CNMRequestNewFriendData::CNMRequestNewFriendData( void ) : CNMSerializable( 'rf', 1, 1 )
{
this->uSerialNo = 0;
::ZeroMemory( this->szRequestID, sizeof( this->szRequestID ) );
this->uRequesteeGameCode = 0;
INITIALIZE_VIRTUALKEY( this->keyToVirtual );
INITIALIZE_VIRTUALKEY( this->keyFromVirtual );
::ZeroMemory( this->szFromLoginID, sizeof( this->szFromLoginID ) );
::ZeroMemory( this->szFromNickName, sizeof( this->szFromNickName ) );
this->uInsertCategoryCode = 0;
ZeroMemory( this->szMessage, sizeof( this->szMessage ) );
this->bAddToNxFriend = FALSE;
}
BEGIN_SERIALIZE( CNMRequestNewFriendData )
//{
UNREFERENCED_PARAMETER(ssStream);
encoder.Encode4( this->uSerialNo );
encoder.EncodeString( this->szRequestID );
encoder.Encode4( this->uRequesteeGameCode );
ENCODE_VIRTUALKEY( this->keyToVirtual );
ENCODE_VIRTUALKEY( this->keyFromVirtual );
encoder.EncodeString( this->szFromLoginID );
encoder.EncodeString( this->szFromNickName );
encoder.Encode4( this->uInsertCategoryCode );
encoder.EncodeString( this->szMessage );
encoder.Encode1( static_cast<UINT8>( this->bAddToNxFriend ) );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMRequestNewFriendData )
//{
UNREFERENCED_PARAMETER(ssStream);
this->uSerialNo = decoder.Decode4();
decoder.DecodeString( this->szRequestID, LOGINID_SIZE );
this->uRequesteeGameCode = decoder.Decode4();
DECODE_VIRTUALKEY( this->keyToVirtual );
DECODE_VIRTUALKEY( this->keyFromVirtual );
decoder.DecodeString( this->szFromLoginID, LOGINID_SIZE );
decoder.DecodeString( this->szFromNickName, NICKNAME_SIZE );
this->uInsertCategoryCode = decoder.Decode4();
decoder.DecodeString( this->szMessage, MSG_SIZE );
this->bAddToNxFriend = decoder.Decode1();
//}
END_DESERIALIZE()
CNMRequestSessionData::CNMRequestSessionData( void ) : CNMSerializable( 'rs', 1, 1 )
{
this->uDataKey = 0;
this->uSessionType = 0;
ZeroMemory( this->szLoginId, sizeof( this->szLoginId ) );
ZeroMemory( this->szNickName, sizeof( this->szNickName ) );
}
BEGIN_SERIALIZE( CNMRequestSessionData )
//{
UNREFERENCED_PARAMETER(ssStream);
encoder.Encode4( this->uDataKey );
encoder.Encode4( this->uSessionType );
encoder.EncodeString( this->szLoginId );
encoder.EncodeString( this->szNickName );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMRequestSessionData )
//{
UNREFERENCED_PARAMETER(ssStream);
this->uDataKey = decoder.Decode4();
this->uSessionType = decoder.Decode4();
decoder.DecodeString( this->szLoginId, LOGINID_SIZE );
decoder.DecodeString( this->szNickName, NICKNAME_SIZE );
//}
END_DESERIALIZE()
CNMGameInfo::CNMGameInfo( void ) : CNMSerializable( 'gf', 1, 1 )
{
this->uGameCode = kGameCode_NULL;
this->uGameCodePrerequired = kGameCode_NULL;
ZeroMemory( this->szID, sizeof( this->szID ) );
ZeroMemory( this->szName, sizeof( this->szName ) );
ZeroMemory( this->szCustomID, sizeof( this->szCustomID ) );
ZeroMemory( this->szRegistryRoot, sizeof( this->szRegistryRoot ) );
ZeroMemory( this->szRegistryExePath, sizeof( this->szRegistryExePath ) );
ZeroMemory( this->szSetupFileUrl, sizeof( this->szSetupFileUrl ) );
this->uAgeLimit = 0;
this->uMask = 0;
ZeroMemory( this->szIconUrl, sizeof( this->szIconUrl ) );
ZeroMemory( this->szHomeUrl, sizeof( this->szHomeUrl ) );
this->uOldGameCode = kGameCode_NULL;
}
BEGIN_SERIALIZE( CNMGameInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
encoder.Encode4( this->uGameCode );
encoder.Encode4( this->uGameCodePrerequired );
encoder.EncodeString( this->szID );
encoder.EncodeString( this->szName );
encoder.EncodeString( this->szCustomID );
encoder.EncodeString( this->szRegistryRoot );
encoder.EncodeString( this->szRegistryExePath );
encoder.EncodeString( this->szSetupFileUrl );
encoder.Encode1( this->uAgeLimit );
encoder.Encode4( this->uMask );
encoder.EncodeString( this->szIconUrl );
encoder.EncodeString( this->szHomeUrl );
encoder.Encode4( this->uOldGameCode );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMGameInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
this->uGameCode = decoder.Decode4();
this->uGameCodePrerequired = decoder.Decode4();
decoder.DecodeString( this->szID, 32 );
decoder.DecodeString( this->szName, 64 );
decoder.DecodeString( this->szCustomID, 32 );
decoder.DecodeString( this->szRegistryRoot, 1024 );
decoder.DecodeString( this->szRegistryExePath, 1024 );
decoder.DecodeString( this->szSetupFileUrl, 1024 );
this->uAgeLimit = decoder.Decode1();
this->uMask = decoder.Decode4();
decoder.DecodeString( this->szIconUrl, 1024 );
decoder.DecodeString( this->szHomeUrl, 1024 );
this->uOldGameCode = decoder.Decode4();
//}
END_DESERIALIZE()
CNMGameListData::CNMGameListData( void ) : CNMSerializable( 'gd', 1, 1 )
{
}
BEGIN_SERIALIZE( CNMGameListData )
//{
UNREFERENCED_PARAMETER(ssStream);
LIST_ENCODE( NMGameInfoList, this->aGameInfo );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMGameListData )
//{
UNREFERENCED_PARAMETER(ssStream);
LIST_DECODE( NMGameInfoList, this->aGameInfo );
//}
END_DESERIALIZE()
CNMCustomNotifyData::CNMCustomNotifyData( void ) : CNMSerializable( 'cn', 1, 1 )
{
this->uType = kCustomNotify_NULL;
this->uToIDCode = 0;
INITIALIZE_VIRTUALKEY( this->keyToVirtual );
this->uFromIDCode = 0;
INITIALIZE_VIRTUALKEY( this->keyFromVirtual );
ZeroMemory( this->szFromLoginID, sizeof( this->szFromLoginID ) );
ZeroMemory( this->szFromNickName, sizeof( this->szFromNickName ) );
ZeroMemory( this->szArgument, sizeof( this->szArgument ) );
ZeroMemory( &this->stDateTime, sizeof( this->stDateTime ) );
this->uPolicyFlag = kCustomNotifyPolicy_Default;
}
BEGIN_SERIALIZE( CNMCustomNotifyData )
//{
UNREFERENCED_PARAMETER(ssStream);
encoder.Encode4( this->uType );
encoder.Encode8( this->uToIDCode );
ENCODE_VIRTUALKEY( this->keyToVirtual );
encoder.Encode8( this->uFromIDCode );
ENCODE_VIRTUALKEY( this->keyFromVirtual );
encoder.EncodeString( this->szFromLoginID );
encoder.EncodeString( this->szFromNickName );
encoder.EncodeString( this->szArgument );
encoder.Encode4( this->stDateTime.wYear );
encoder.Encode1( static_cast<_UInt8_>(this->stDateTime.wMonth) );
encoder.Encode1( static_cast<_UInt8_>(this->stDateTime.wDay) );
encoder.Encode4( this->uPolicyFlag );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMCustomNotifyData )
//{
UNREFERENCED_PARAMETER(ssStream);
this->uType = decoder.Decode4();
this->uToIDCode = decoder.Decode8();
DECODE_VIRTUALKEY( this->keyToVirtual );
this->uFromIDCode = decoder.Decode8();
DECODE_VIRTUALKEY( this->keyFromVirtual );
decoder.DecodeString( this->szFromLoginID, LOGINID_SIZE );
decoder.DecodeString( this->szFromNickName, NICKNAME_SIZE);
decoder.DecodeString( this->szArgument, MSG_SIZE );
this->stDateTime.wYear = static_cast<WORD>( decoder.Decode4() );
this->stDateTime.wMonth = decoder.Decode1();
this->stDateTime.wDay = decoder.Decode1();
this->uPolicyFlag = decoder.Decode4();
//}
END_DESERIALIZE()
CNMGameCode::CNMGameCode( void ) : CNMSerializable( 'gc', 1, 1 )
{
}
CNMGameCode::CNMGameCode( UINT32 uGameCode ) : CNMSerializable( 'gc', 1, 1 )
{
this->uGameCode = uGameCode;
}
BEGIN_SERIALIZE( CNMGameCode )
//{
UNREFERENCED_PARAMETER(ssStream);
encoder.Encode4( this->uGameCode );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMGameCode )
//{
UNREFERENCED_PARAMETER(ssStream);
this->uGameCode = decoder.Decode4();
//}
END_DESERIALIZE()
CNMGameServerCode::CNMGameServerCode( void ) : CNMSerializable( 'gs', 1, 1 )
{
this->uGameServerCode = 0;
}
CNMGameServerCode::CNMGameServerCode( UINT32 uGameServerCode ) : CNMSerializable( 'gs', 1, 1 )
{
this->uGameServerCode = uGameServerCode;
}
BEGIN_SERIALIZE( CNMGameServerCode )
//{
UNREFERENCED_PARAMETER(ssStream);
encoder.Encode4( this->uGameServerCode );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMGameServerCode )
//{
UNREFERENCED_PARAMETER(ssStream);
this->uGameServerCode = decoder.Decode4();
//}
END_DESERIALIZE()
//-----------------------------------------------------------------------------
// CNMConnConfig
//-----------------------------------------------------------------------------
CNMConnConfig::CNMConnConfig()
: CNMSerializable( 'cc', 1, 1 )
, uLoginServerPort( 0 )
, uStatServerPort( 0 )
, bAutoPatch( TRUE )
, uAuthServerPort( 0 )
{
this->szLoginServerIp[ 0 ] = 0;
this->szStatServerIp[ 0 ] = 0;
}
CNMConnConfig::CNMConnConfig( LPCTSTR szLoginServerIp, UINT16 uLoginServerPort, LPCTSTR szStatServerIp, UINT16 uStatServerPort, BOOL bAutoPatch, LPCTSTR szAuthServerIp, UINT16 uAuthServerPort )
: CNMSerializable( 'cc', 1, 1 )
, uLoginServerPort( uLoginServerPort )
, uStatServerPort( uStatServerPort )
, bAutoPatch( bAutoPatch )
, szAuthServerIp( szAuthServerIp )
, uAuthServerPort( uAuthServerPort )
{
StringArrayCopy( this->szLoginServerIp, szLoginServerIp );
StringArrayCopy( this->szStatServerIp, szStatServerIp );
}
CNMConnConfig::CNMConnConfig( CNMConnConfig const & rhs )
: CNMSerializable( 'cc', 1, 1 )
, uLoginServerPort( rhs.uLoginServerPort )
, uStatServerPort( rhs.uStatServerPort )
, bAutoPatch( rhs.bAutoPatch )
, szAuthServerIp( rhs.szAuthServerIp )
, uAuthServerPort( rhs.uAuthServerPort )
{
StringArrayCopy( this->szLoginServerIp, rhs.szLoginServerIp );
StringArrayCopy( this->szStatServerIp, rhs.szStatServerIp );
}
CNMConnConfig & CNMConnConfig::operator = ( CNMConnConfig const & rhs )
{
StringArrayCopy( this->szLoginServerIp, rhs.szLoginServerIp );
this->uLoginServerPort = rhs.uLoginServerPort;
StringArrayCopy( this->szStatServerIp, rhs.szStatServerIp );
this->uStatServerPort = rhs.uStatServerPort;
this->bAutoPatch = rhs.bAutoPatch;
this->szAuthServerIp = rhs.szAuthServerIp;
this->uAuthServerPort = rhs.uAuthServerPort;
return *this;
}
BEGIN_SERIALIZE( CNMConnConfig )
//{
UNREFERENCED_PARAMETER(ssStream);
encoder.EncodeString( this->szLoginServerIp );
encoder.Encode2( this->uLoginServerPort );
encoder.EncodeString( this->szStatServerIp );
encoder.Encode2( this->uStatServerPort );
encoder.Encode1( static_cast<BYTE>(this->bAutoPatch) );
encoder.EncodeString( this->szAuthServerIp );
encoder.Encode2( this->uAuthServerPort );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMConnConfig )
//{
UNREFERENCED_PARAMETER(ssStream);
decoder.DecodeString( this->szLoginServerIp, IPADDR_SIZE );
this->uLoginServerPort = decoder.Decode2();
decoder.DecodeString( this->szStatServerIp, IPADDR_SIZE );
this->uStatServerPort = decoder.Decode2();
this->bAutoPatch = static_cast<BOOL>( decoder.Decode1() );
decoder.DecodeString( this->szAuthServerIp.GetBuffer(), this->szAuthServerIp.GetCapacity() );
this->uAuthServerPort = decoder.Decode2();
//}
END_DESERIALIZE()
//-----------------------------------------------------------------------------
// CNMChannelInfo
//-----------------------------------------------------------------------------
CNMChannelInfo::CNMChannelInfo()
: CNMSerializable('hi', 1, 1)
, channelSN( 0 )
, userType( UserType_Nexon )
, channelType( ChannelType_General )
, gameCode( kGameCode_NULL )
, serverCode( 0 )
, maxUserCount( 0 )
, flag( 0 )
, masterUserSN( 0 )
, masterCharacterSN( 0 )
, guildSN( 0 )
{
}
CNMChannelInfo::CNMChannelInfo( CNMChannelInfo const & rhs )
: CNMSerializable('hi', 1, 1)
, channelSN( rhs.channelSN )
, userType( rhs.userType )
, channelType( rhs.channelType )
, gameCode ( rhs.gameCode )
, serverCode( rhs.serverCode )
, title( rhs.title )
, password( rhs.password )
, maxUserCount( rhs.maxUserCount )
, flag( rhs.flag )
, masterUserSN( rhs.masterUserSN )
, masterCharacterSN( rhs.masterCharacterSN )
, guildSN( rhs.guildSN )
, guildName( rhs.guildName )
{
}
CNMChannelInfo & CNMChannelInfo::operator = ( CNMChannelInfo const & rhs )
{
this->channelSN = rhs.channelSN;
this->userType = rhs.userType;
this->channelType = rhs.channelType;
this->gameCode = rhs.gameCode;
this->serverCode = rhs.serverCode;
this->title = rhs.title;
this->password = rhs.password;
this->maxUserCount = rhs.maxUserCount;
this->flag = rhs.flag;
this->masterUserSN = rhs.masterUserSN;
this->masterCharacterSN = rhs.masterCharacterSN;
this->guildSN = rhs.guildSN;
this->guildName = rhs.guildName;
return *this;
}
BEGIN_SERIALIZE(CNMChannelInfo)
UNREFERENCED_PARAMETER(ssStream);
encoder.Encode4( this->channelSN );
encoder.Encode4( this->userType );
encoder.Encode4( this->channelType );
encoder.Encode4( this->gameCode );
encoder.Encode4( this->serverCode );
encoder.EncodeString( this->title );
encoder.EncodeString( this->password );
encoder.Encode4( this->maxUserCount );
encoder.Encode4( this->flag );
encoder.Encode4( this->masterUserSN );
encoder.Encode4( this->masterCharacterSN );
encoder.Encode4( this->guildSN );
encoder.EncodeString( this->guildName );
END_SERIALIZE()
BEGIN_DESERIALIZE(CNMChannelInfo)
UNREFERENCED_PARAMETER(ssStream);
this->channelSN = decoder.Decode4();
this->userType = decoder.Decode4();
this->channelType = decoder.Decode4();
this->gameCode = decoder.Decode4();
this->serverCode = decoder.Decode4();
decoder.DecodeString( this->title.GetBuffer(), this->title.GetCapacity() );
decoder.DecodeString( this->password.GetBuffer(), this->password.GetCapacity() );
this->maxUserCount = decoder.Decode4();
this->flag = decoder.Decode4();
this->masterUserSN = decoder.Decode4();
this->masterCharacterSN = decoder.Decode4();
this->guildSN = decoder.Decode4();
decoder.DecodeString( this->guildName.GetBuffer(), this->guildName.GetCapacity() );
END_DESERIALIZE()
//-----------------------------------------------------------------------------
// CNMClientChannelInfo
//-----------------------------------------------------------------------------
CNMClientChannelInfo::CNMClientChannelInfo()
: CNMChannelInfo()
, nStatus( kStatus_ConnectionFailed )
, uRequestProcessId( 0 )
{
++this->m_uObjectSubCode;
}
CNMClientChannelInfo::CNMClientChannelInfo( CNMClientChannelInfo const & rhs )
: CNMChannelInfo( rhs )
, nStatus( rhs.nStatus )
, uRequestProcessId( rhs.uRequestProcessId )
{
++this->m_uObjectSubCode;
}
CNMClientChannelInfo & CNMClientChannelInfo::operator = ( CNMClientChannelInfo const & rhs )
{
CNMChannelInfo::operator = ( rhs );
nStatus = rhs.nStatus;
uRequestProcessId = rhs.uRequestProcessId;
return *this;
}
CNMClientChannelInfo::CNMClientChannelInfo( CNMChannelInfo const & channelInfo )
: CNMChannelInfo( channelInfo )
, nStatus( kStatus_ConnectionFailed )
, uRequestProcessId( 0 )
{
++this->m_uObjectSubCode;
}
CNMClientChannelInfo & CNMClientChannelInfo::operator = ( CNMChannelInfo const & channelInfo )
{
CNMChannelInfo::operator = ( channelInfo );
return *this;
}
namespace
{
void ChatRoomInfoToChannelInfo( CNMChatRoomInfoEx const & chatRoomInfo, CNMClientChannelInfo & clientChannelInfo )
{
clientChannelInfo.channelType = chatRoomInfo.uRoomType;
clientChannelInfo.serverCode = GET_GUILDCODE( chatRoomInfo.uGuildKey );
clientChannelInfo.guildSN = GET_GUILDSERIAL( chatRoomInfo.uGuildKey );
clientChannelInfo.gameCode = chatRoomInfo.uGameCode;
clientChannelInfo.guildName = chatRoomInfo.szGuildTitle;
clientChannelInfo.title = chatRoomInfo.szRoomTitle;
clientChannelInfo.maxUserCount = chatRoomInfo.uMaxSize;
clientChannelInfo.flag = chatRoomInfo.uFlag;
clientChannelInfo.password = chatRoomInfo.szPassword;
clientChannelInfo.masterUserSN = GetNexonSN( chatRoomInfo.uOwnerIdCode );
clientChannelInfo.nStatus = chatRoomInfo.uStatus;
clientChannelInfo.uRequestProcessId = chatRoomInfo.uRequestProcId;
}
};
CNMClientChannelInfo::CNMClientChannelInfo( CNMChatRoomInfoEx const & rhs )
: CNMChannelInfo()
{
++this->m_uObjectSubCode;
ChatRoomInfoToChannelInfo( rhs, *this );
}
CNMClientChannelInfo & CNMClientChannelInfo::operator = ( CNMChatRoomInfoEx const & rhs )
{
ChatRoomInfoToChannelInfo( rhs, *this );
return *this;
}
BEGIN_SERIALIZE( CNMClientChannelInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
PRIOR_SERIALIZE( CNMChannelInfo );
encoder.Encode4( this->nStatus );
encoder.Encode4( this->uRequestProcessId );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMClientChannelInfo )
//{
UNREFERENCED_PARAMETER(ssStream);
PRIOR_DESERIALIZE( CNMChannelInfo );
this->nStatus = decoder.Decode4();
this->uRequestProcessId = decoder.Decode4();
//}
END_DESERIALIZE()
//-----------------------------------------------------------------------------
// CNMChannelMemberInfo
//-----------------------------------------------------------------------------
CNMChannelMemberInfo::CNMChannelMemberInfo()
: CNMSerializable('hm', 1, 1)
, userSN( 0 )
, characterSN( 0 )
, flag( 0 )
{
}
CNMChannelMemberInfo::CNMChannelMemberInfo( CNMChannelMemberInfo const & rhs )
: CNMSerializable('hm', 1, 1)
, userSN( rhs.userSN )
, characterSN( rhs.characterSN )
, name( rhs.name )
, metaData( rhs.metaData )
, flag( rhs.flag )
{
}
CNMChannelMemberInfo & CNMChannelMemberInfo::operator = ( CNMChannelMemberInfo const & rhs )
{
this->userSN = rhs.userSN;
this->characterSN = rhs.characterSN;
this->name = rhs.name;
this->metaData = rhs.metaData;
this->flag = rhs.flag;
return *this;
}
CNMChannelMemberInfo::CNMChannelMemberInfo( CNMChatRoomMemberInfo const & rhs )
: CNMSerializable( 'hm', 1, 1 )
, userSN( Nexon::Platform::GetNexonSN( rhs.uIDCode ) )
, characterSN( rhs.keyVirtual.uVirtualIDCode )
, name( rhs.szNickName )
, flag( rhs.uFlag )
{
}
CNMChannelMemberInfo & CNMChannelMemberInfo::operator = ( CNMChatRoomMemberInfo const & rhs )
{
this->userSN = Nexon::Platform::GetNexonSN( rhs.uIDCode );
this->characterSN = rhs.keyVirtual.uVirtualIDCode;
this->name = rhs.szNickName;
this->flag = rhs.uFlag;
return *this;
}
BEGIN_SERIALIZE( CNMChannelMemberInfo )
UNREFERENCED_PARAMETER( ssStream );
encoder.Encode4( this->userSN );
encoder.Encode4( this->characterSN );
encoder.EncodeString( this->name );
encoder.EncodeString( this->metaData );
encoder.Encode4( this->flag );
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMChannelMemberInfo )
UNREFERENCED_PARAMETER( ssStream );
this->userSN = decoder.Decode4();
this->characterSN = decoder.Decode4();
decoder.DecodeString( this->name.GetBuffer(), this->name.GetCapacity() );
decoder.DecodeString( this->metaData.GetBuffer(), this->metaData.GetCapacity() );
this->flag = decoder.Decode4();
END_DESERIALIZE()
//-----------------------------------------------------------------------------
// CNMChannelMemberInfoList
//-----------------------------------------------------------------------------
CNMChannelMemberInfoList::CNMChannelMemberInfoList()
: CNMSerializable('hl', 1, 1)
{
}
CNMChannelMemberInfoList::CNMChannelMemberInfoList( NMChannelMemberInfoList const & channelMemberInfoList )
: CNMSerializable('hl', 1, 1)
{
this->members = channelMemberInfoList;
}
BEGIN_SERIALIZE(CNMChannelMemberInfoList)
UNREFERENCED_PARAMETER(ssStream);
LIST_ENCODE(NMChannelMemberInfoList, this->members);
END_SERIALIZE()
BEGIN_DESERIALIZE(CNMChannelMemberInfoList)
UNREFERENCED_PARAMETER(ssStream);
LIST_DECODE(NMChannelMemberInfoList, this->members);
END_DESERIALIZE()
//-----------------------------------------------------------------------------
// CNMChannelMessage
//-----------------------------------------------------------------------------
CNMChannelMessage::CNMChannelMessage()
: CNMSerializable( 'hs', 1, 1 )
, messageType( Type_ChatMessage )
, senderUserSN( 0 )
, senderCharacterSN( 0 )
, targetUserSN( 0 )
, targetCharacterSN( 0 )
, uFlag( 0 )
{
}
CNMChannelMessage::CNMChannelMessage( CNMChannelMessage const & rhs )
: CNMSerializable( 'hs', 1, 1 )
, messageType( rhs.messageType )
, senderUserSN( rhs.senderUserSN )
, senderCharacterSN( rhs.senderCharacterSN )
, senderName( rhs.senderName )
, targetUserSN( rhs.targetUserSN )
, targetCharacterSN( rhs.targetCharacterSN )
, message( rhs.message )
, metaData( rhs.metaData )
, uFlag( rhs.uFlag )
{
}
CNMChannelMessage & CNMChannelMessage::operator = ( CNMChannelMessage const & rhs )
{
this->messageType = rhs.messageType;
this->senderUserSN = rhs.senderUserSN;
this->senderCharacterSN = rhs.senderCharacterSN;
this->senderName = rhs.senderName;
this->targetUserSN = rhs.targetUserSN;
this->targetCharacterSN = rhs.targetCharacterSN;
this->message = rhs.message;
this->metaData = rhs.metaData;
this->uFlag = rhs.uFlag;
return *this;
}
CNMChannelMessage::CNMChannelMessage( CNMChatMessage const & rhs, INT32 nSenderUserSN )
: CNMSerializable( 'hs', 1, 1 )
, senderUserSN( nSenderUserSN )
, senderCharacterSN( rhs.keyVirtual.uVirtualIDCode )
, senderName( rhs.szSenderName )
, targetUserSN( 0 )
, targetCharacterSN( 0 )
, message( rhs.szChatMessage )
, uFlag( rhs.uFlag )
{
//
// <09>⺻ Ÿ<><C5B8><EFBFBD><EFBFBD> ä<><C3A4><EFBFBD>̰<EFBFBD> Ȥ<><C8A4> <20>ٸ<EFBFBD> Ÿ<><C5B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> üũ<C3BC>մϴ<D5B4>
//
this->messageType = CNMChannelMessage::Type_ChatMessage;
{
if ( ::CompareString( LOCALE_USER_DEFAULT, 0, s_szSystem, -1, rhs.szSenderName, -1 ) == CSTR_EQUAL )
{
this->messageType = CNMChannelMessage::Type_SystemMessage;
}
else if ( ::CompareString( LOCALE_USER_DEFAULT, 0, s_szNotice, -1, rhs.szSenderName, -1 ) == CSTR_EQUAL ||
::CompareString( LOCALE_USER_DEFAULT, 0, s_szOpen, -1, rhs.szSenderName, -1 ) == CSTR_EQUAL )
{
this->messageType = CNMChannelMessage::Type_ErrorMessage;
}
}
}
BEGIN_SERIALIZE( CNMChannelMessage )
UNREFERENCED_PARAMETER( ssStream );
encoder.Encode4( this->messageType );
encoder.Encode4( this->senderUserSN );
encoder.Encode4( this->senderCharacterSN );
encoder.EncodeString( this->senderName );
encoder.Encode4( this->targetUserSN );
encoder.Encode4( this->targetCharacterSN );
encoder.EncodeString( this->message );
encoder.EncodeString( this->metaData );
encoder.Encode4( this->uFlag );
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMChannelMessage )
UNREFERENCED_PARAMETER( ssStream );
this->messageType = decoder.Decode4();
this->senderUserSN = decoder.Decode4();
this->senderCharacterSN = decoder.Decode4();
decoder.DecodeString( this->senderName.GetBuffer(), this->senderName.GetCapacity() );
this->targetUserSN = decoder.Decode4();
this->targetCharacterSN = decoder.Decode4();
decoder.DecodeString( this->message.GetBuffer(), this->message.GetCapacity() );
decoder.DecodeString( this->metaData.GetBuffer(), this->metaData.GetCapacity() );
this->uFlag = decoder.Decode4();
END_DESERIALIZE()
//-----------------------------------------------------------------------------
// CNMP2PMessage
//-----------------------------------------------------------------------------
CNMP2PMessage::CNMP2PMessage()
: CNMSerializable( 'rm', 1, 1 )
, cbyDataSize( 0 )
{
}
CNMP2PMessage::CNMP2PMessage( CNMP2PMessage const & rhs )
: CNMSerializable( 'rm', 1, 1 )
, sender( rhs.sender )
, receiver( rhs.receiver )
, cbyDataSize( __min( rhs.cbyDataSize, sizeof( data ) ) )
{
::CopyMemory( this->data, rhs.data, this->cbyDataSize );
}
CNMP2PMessage::CNMP2PMessage( NMP2PKey const & sender, NMP2PKey const & receiver, BYTE const * pbyData, UINT32 cbyDataSize )
: CNMSerializable( 'rm', 1, 1 )
, sender( sender )
, receiver( receiver )
, cbyDataSize( __min( cbyDataSize, sizeof( data ) ) )
{
::CopyMemory( this->data, pbyData, this->cbyDataSize );
}
CNMP2PMessage & CNMP2PMessage::operator = ( CNMP2PMessage const & rhs )
{
this->sender = rhs.sender;
this->receiver = rhs.receiver;
this->cbyDataSize = __min( rhs.cbyDataSize, sizeof( this->data ) );
::CopyMemory( this->data, rhs.data, this->cbyDataSize );
return *this;
}
BEGIN_SERIALIZE( CNMP2PMessage )
//{
UNREFERENCED_PARAMETER( ssStream );
ENCODE_P2PKEY( this->sender );
ENCODE_P2PKEY( this->receiver );
encoder.Encode4( this->cbyDataSize );
encoder.EncodeBinary( this->data, this->cbyDataSize );
//}
END_SERIALIZE()
BEGIN_DESERIALIZE( CNMP2PMessage )
//{
UNREFERENCED_PARAMETER( ssStream );
DECODE_P2PKEY( this->sender );
DECODE_P2PKEY( this->receiver );
this->cbyDataSize = decoder.Decode4();
this->cbyDataSize = __min( this->cbyDataSize, P2PDATA_SIZE );
decoder.DecodeBinary( this->data, this->cbyDataSize );
//}
END_DESERIALIZE()