#include "StdAfx.h" #include "DNChatRoom.h" #include "DNGameRoom.h" #include "DNUserSession.h" #include "DNFriend.h" CDNChatRoom::CDNChatRoom(UINT nChatRoomID, WCHAR * pwzRoomName, BYTE nRoomType, USHORT uRoomAllow, WCHAR * pwzPassword, WCHAR * pwzPRLine1, WCHAR * pwzPRLine2, WCHAR * pwzPRLine3 ) { memset(m_nChatRoomMemberArray, 0, sizeof(m_nChatRoomMemberArray)); m_nLeaderSessionID = 0; m_nChatRoomID = nChatRoomID; m_nChatRoomType = nRoomType; m_nChatRoomAllow = uRoomAllow; m_wstrChatRoomName = pwzRoomName; m_wstrChatRoomPW = pwzPassword; m_wstrChatRoomPRLine1 = pwzPRLine1; m_wstrChatRoomPRLine2 = pwzPRLine2; m_wstrChatRoomPRLine3 = pwzPRLine3; m_VecKickedList.clear(); m_pGameRoom = NULL; } CDNChatRoom::~CDNChatRoom() { m_VecKickedList.clear(); } UINT CDNChatRoom::GetMemberAIDFromIndex( int nIndex ) { if( nIndex < 0 || nIndex >= CHATROOMMAX ) return 0; return m_nChatRoomMemberArray[ nIndex ]; } int CDNChatRoom::GetUserCount() { int nUserCount = 0; for( int i=0; iGetUserSession(nUserAID); if( pUser != NULL ) { pUser->m_nChatRoomID = 0; } return ERROR_NONE; } int CDNChatRoom::EnterRoom( UINT nUserAID, WCHAR * pwzPassword, bool bLeader ) { CDNUserSession * pUser = m_pGameRoom->GetUserSession(nUserAID); if( pUser == NULL ) return ERROR_GENERIC_USER_NOT_FOUND; int nCanEnter = 0; if((nCanEnter = _CanEnterRoom( nUserAID, pwzPassword, bLeader )) != ERROR_NONE ) return nCanEnter; int nEmptyIndex = _FindEmptyIndex(); if( nEmptyIndex < 0 ) return ERROR_CHATROOM_NOMORESPACE; // ¹æÀÌ ´Ù áÀ½ m_nChatRoomMemberArray[nEmptyIndex] = nUserAID; if( bLeader ) m_nLeaderSessionID = nUserAID; // À¯ÀúÀÇ Ã¤ÆÃ¹æID¸¦ ¼³Á¤ÇÑ´Ù. pUser->m_nChatRoomID = m_nChatRoomID; return ERROR_NONE; } void CDNChatRoom::ChangeRoomOption( WCHAR * pwzRoomName, BYTE nRoomType, USHORT nRoomAllow, WCHAR * pwzPassword, WCHAR * pwzPRLine1, WCHAR * pwzPRLine2, WCHAR * pwzPRLine3 ) { m_wstrChatRoomName = pwzRoomName; m_nChatRoomType = nRoomType; m_nChatRoomAllow = nRoomAllow; m_wstrChatRoomPW = pwzPassword; m_wstrChatRoomPRLine1 = pwzPRLine1; m_wstrChatRoomPRLine2 = pwzPRLine2; m_wstrChatRoomPRLine3 = pwzPRLine3; } void CDNChatRoom::SendChatMessageToAll( int cLen, const WCHAR *pwszCharacterName, const WCHAR *pwszChatMsg ) { for( int i=0; iGetUserSession(m_nChatRoomMemberArray[i]); if( pUser == NULL ) continue; pUser->SendChat( CHATTYPE_CHATROOM, cLen, pwszCharacterName, pwszChatMsg ); } } void CDNChatRoom::SendProfileToAll( int nSessionID, TProfile & profile ) { for( int i=0; iGetUserSession(m_nChatRoomMemberArray[i]); if( pUser == NULL ) continue; pUser->SendDisplayProfile( nSessionID, profile ); } } int CDNChatRoom::_CanEnterRoom( UINT nUserAID, WCHAR * pwzPassword, bool bLeader ) { CDNUserSession * pUser = m_pGameRoom->GetUserSession(nUserAID); if( pUser == NULL ) return ERROR_CHATROOM_CANNOTENTER; // 1. ÀϹÝÀûÀΠüũ // 1.1 ºó°ø°£ üũ int nEmptyIndex = _FindEmptyIndex(); if( nEmptyIndex < 0 ) return ERROR_CHATROOM_NOMORESPACE; // ¹æÀÌ ´Ù áÀ½ // 1.2 ¹æ¿¡ Âü¿©ÁßÀΰ¡? int nMyIndex = _FindUserFromAID( nUserAID ); if( nMyIndex >= 0 ) return ERROR_CHATROOM_ALREADYINROOM; // ÀÌ¹Ì ¹æ¿¡ Âü¿©ÁßÀÌ´Ù. // 1.3 ¿µ±¸Å±¸®½ºÆ®¿¡ Á¸ÀçÇϴ°¡? for( UINT i=0; i 0 && m_wstrChatRoomPW != pwzPassword ) return ERROR_CHATROOM_WRONGPASSWORD; // 2.2 ÀÔÀå Á¦ÇÑ Ã¼Å© if( bLeader == false ) // ¸®´õ´Â ÀÔÀå Á¦ÇÑ¿¡ °É¸®Áö ¾Ê´Â´Ù. { CDNUserSession * pLeader = m_pGameRoom->GetUserSession(m_nLeaderSessionID); if( pLeader == NULL ) return ERROR_CHATROOM_UNKNOWNUSER; bool bFriend = pLeader->GetFriend()->HasFriend( pUser->GetCharacterDBID() ); bool bSameGuild = pLeader->GetGuildUID().IsSet() && pUser->GetGuildUID().IsSet() && pLeader->GetGuildUID() == pUser->GetGuildUID(); switch( m_nChatRoomAllow ) { case CHATROOMALLOW_ALL: break; case CHATROOMALLOW_FRIEND: if( bFriend == false ) return ERROR_CHATROOM_CANNOTENTER; break; case CHATROOMALLOW_GUILD: if( bSameGuild == false ) return ERROR_CHATROOM_CANNOTENTER; break; case CHATROOMALLOW_FRIENDANDGUILD: if((bFriend || bSameGuild) == false ) return ERROR_CHATROOM_CANNOTENTER; break; } } return ERROR_NONE; } int CDNChatRoom::_FindUserFromAID( UINT nUserAID ) { for( int i=0; i < CHATROOMMAX; i++ ) { if( m_nChatRoomMemberArray[i] == nUserAID ) { return i; } } return -1; } int CDNChatRoom::_FindEmptyIndex() { for( int i=0; i < CHATROOMMAX; i++ ) { if( m_nChatRoomMemberArray[i] <= 0 ) return i; } return -1; }